释放指针时触发断点。

问题描述 投票:0回答:1

我正在为一个类写一棵二进制搜索树,我可能做错了什么,但我的技术无法确定是什么。

下面是节点结构。

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;
}

还有我的destroy整个树的函数

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个回答
2
投票
  node_new = (NodePtr) malloc(sizeof node_new);

应该是

  node_new = malloc(sizeof *node_new);

sizeof node_new 是大小 pointer 何况 sizeof *node_new 是指针指向的对象的大小。

© www.soinside.com 2019 - 2024. All rights reserved.