【问题标题】:Breakpoint triggered when freeing a pointer释放指针时触发断点
【发布时间】:2020-10-04 18:14:53
【问题描述】:

我正在为一个类编写一个二叉搜索树,我可能做错了什么,但我无法确定是什么。

这是节点结构:

typedef struct Node {
  int value;
  struct Node *left;
  struct Node *right;
} Node, *NodePtr;

这是我的创建节点函数:

NodePtr nodeCreate(int value) {
  NodePtr node_new = 0;
  node_new = (NodePtr) malloc(sizeof node_new);
  node_new->value = value;
  node_new->left = 0;
  node_new->right = 0;
  return node_new;
}

而我的销毁整个树函数:

void treeDestroy(NodePtr root) {
  if (!root) { return; } 
    treeDestroy(root->left); 
    treeDestroy(root->right);
    free(root); // HERE IS WHERE MY BREAKPOINT TRIGGERS
    root = 0;
}

最后这是我的主要外观:

int main(int argc, char *argv[]) {
  NodePtr tree_root = 0;
  tree_root = nodeCreate(2);
  tree_root->left = nodeCreate(1);
  tree_root->right = nodeCreate(3);
  treePrint(tree_root);
  treeDestroy(tree_root);
  return 0;
}

谁能帮我找出问题所在?

【问题讨论】:

    标签: c pointers memory-management binary-tree


    【解决方案1】:
      node_new = (NodePtr) malloc(sizeof node_new);
    

    应该是

      node_new = malloc(sizeof *node_new);
    

    sizeof node_newpointer 的大小,其中 sizeof *node_new 是指针指向的对象的大小。

    【讨论】:

    • 有道理,不敢相信我错过了!谢谢!
    • @void-main-void 没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多