当我尝试使用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
答案 0 :(得分:3)
在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);
}