我正在创建一个二叉树作为学习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;
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;
}
有什么建议吗?
答案 0 :(得分:3)
makeNode
正在写入未初始化指针指向的(未定义)地址。你没有拥有这个指向的内存,所以试图写入它会导致未定义的行为;崩溃是未定义行为的有效(通常是有用的)示例。
你需要在这里分配内存
Node* makeNode(int _value ) {
Node *node = malloc(sizeof(*node));
if (node == NULL) {
return NULL;
}
...
确保将此内存返回系统 - 通过调用free(node)
- 从列表中删除节点时。