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

我正在创建一个二叉树作为学习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;
}

有什么建议吗?

makeNode
正在写入未初始化指针指向的(未定义)地址。您不拥有此指向的内存,因此尝试写入会导致未定义的行为;崩溃是未定义行为的一个有效(且通常有用)示例

您需要在这里分配内存

Node* makeNode(int _value ) {
    Node *node = malloc(sizeof(*node));
    if (node == NULL) {
        return NULL;
    }
    ...

从列表中删除节点时,请确保通过调用
free(node)
,将此内存返回系统。

任何内容都是未定义行为的有效示例:)(格式化硬盘、打印莎士比亚作品、打开烤面包机)。我想你的意思是“普通的例子”