c - 二叉树问题,C 代码,使用 malloc

标签 c malloc binary-tree

经过很长一段时间后,我正在尝试用 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));

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

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

关于c - 二叉树问题,C 代码,使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45253414/

相关文章:

c - 为什么在使用指向指针的指针时出现 malloc() 的段错误?

c - C 中数组的动态内存分配

binary-tree - 二叉树中距离最大的两个节点

java - 谁能告诉我为什么我的霍夫曼编码算法代码会产生错误?

c - 在 C 中将文本文件中的 int 读入数组

c - 使用 IMUL 指令将数组中的值相乘会产生不正确的值

c - 如何释放已分配的 char 指针? (我将char指针设置为NULL)

c - 从指针数组中查找重复项

c - gcc 警告 : function used but not defined

algorithm - 对于提取最大元素,平衡二叉搜索树和最大堆哪个更好?