C初始化总线错误
我正在创建一个二叉树作为学习C的小项目。这里是所有你需要的代码C初始化总线错误,c,bus,C,Bus,我正在创建一个二叉树作为学习C的小项目。这里是所有你需要的代码 typedef struct { int value; struct Node *leftchild; struct Node *rightchild; struct Node *parent; } Node; typedef struct { Node *root; } BinaryTree; void newBT( BinaryTree *_bt ) { _bt->root = 0; ret
typedef struct {
int value;
struct Node *leftchild;
struct Node *rightchild;
struct Node *parent;
} Node;
typedef struct {
Node *root;
} BinaryTree;
void newBT( BinaryTree *_bt ) {
_bt->root = 0;
return;
};
Node* makeNode(int _value ) {
Node *node;
node->value = _value;
node->leftchild = 0;
node->rightchild = 0;
node->parent = 0;
return node;
};
void insert( BinaryTree* _bt, int _value ) {
_bt->root = makeNode(_value);
return;
};
现在,我已经测试了makeNode()函数,它按预期工作,我使用has()函数检查它,该函数遍历列表,如果找到具有给定值的节点,则返回true,否则返回false。这是下面main()中注释掉的第一行。当我将BinaryTree传递到insert()并使用指针声明同一行时,我得到一个总线错误:10
int main () {
BinaryTree bt;
newBT(&bt);
//bt.root = makeNode(14);
insert(&bt, 14);
//printf("%d \n", has(&bt, 14));
return 0;
}
有什么建议吗?
makeNode
正在写入未初始化指针指向的(未定义)地址。您不拥有此指向的内存,因此尝试写入会导致未定义的行为;崩溃是未定义行为的一个有效(且通常有用)示例
您需要在这里分配内存
Node* makeNode(int _value ) {
Node *node = malloc(sizeof(*node));
if (node == NULL) {
return NULL;
}
...
从列表中删除节点时,请确保通过调用
free(node)
,将此内存返回系统。任何内容都是未定义行为的有效示例:)(格式化硬盘、打印莎士比亚作品、打开烤面包机)。我想你的意思是“普通的例子”