尝试使用C中的结构创建二进制树时出现总线错误。
请为我提出解决此总线错误的解决方案。我正在Mac OSX上编译。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node* left;
struct node* right;
};
struct node* NewNode(int data) {
struct node* inode ;
inode->data = data;
inode->left = NULL;
inode->right = NULL;
printf("%d\n", inode->data);
return(inode);
}
struct node* insert(struct node* node ,int data){
if(node == NULL)
return(NewNode(data));
else{
if(data <= node->data)
node->left = insert(node->left, data);
else
node->right = insert(node->right, data);
return(node);
}
}
struct node* build123a() {
struct node* root = newNode(2);
struct node* lChild = newNode(1);
struct node* rChild = newNode(3);
root->left = lChild;
root->right= rChild;
return(root);
}
int main(void) {
build123a();
}
输出:总线错误10
最佳答案
在您的newNode
函数中,您正在定义结构指针struct node* inode
,但未分配它。然后访问它以存储数据,这是不正确的。inode
将具有随机值(作为地址),访问该地址时,可能会出现总线错误。
您需要在函数中分配内存,例如
struct node* NewNode(int data) {
struct node* inode ;
inode = malloc(sizeof(*inode)); //allocate memory
inode->data = data;
inode->left = NULL;
inode->right = NULL;
printf("%d\n", inode->data);
return(inode);
}