二叉树、C 代码、使用 malloc 的问题



经过很长时间:),我正在尝试用 C 编写一个简单的树程序但是卡在向根节点添加更多节点的代码上

以下是代码片段:

struct node* root;
struct node* new_node;
// Add a node
new_node = malloc(sizeof(struct node*));
new_node -> left = NULL;
new_node -> data = 934;
new_node -> right = NULL;
// Mark this as root
root = new_node;
// Add a node
new_node = malloc(sizeof(struct node*));
new_node -> left = NULL;
new_node -> data = 967;
new_node -> right = NULL;
// Make this left node of root
root -> left = new_node;
// Add a node
new_node = malloc(sizeof(struct node*));
new_node -> left = NULL;  // This line is the problem
new_node -> data = 612;
new_node -> right = NULL;

导致问题的行标有注释。 当我将其设为 NULL 时,数据 967 变为 0。

但是,如果我将new_node代码放在函数中并调用

root = new_node(934)
root -> left = new_node(967)
root -> right = new_node(612)

这工作正常。我在我的代码上尝试了 gdb,但不明白为什么会发生这种情况

new_node = malloc(sizeof(struct node*));

应该是:

new_node = malloc(sizeof(struct node));

到处。另一种可能性是new_node = malloc(sizeof(*new_node));

您需要分配要指向的整个节点,而不仅仅是指向节点的指针。

由于您没有为节点分配足够的内存,因此在写入节点的字段时会出现未定义的行为,在您的情况下,这会导致它覆盖现有数据。

相关内容

  • 没有找到相关文章

最新更新