程序在执行`free()`时崩溃

时间:2014-04-28 17:40:00

标签: c free binary-search-tree

我正在处理BST,我必须解除分配没有子节点的节点。所以我的计划有以下步骤:

  1. 到达节点;
  2. 检查它没有孩子;
  3. 确定节点是左子节点还是右子节点;
  4. 取消分配节点并将指针设置为NULL
  5. 当达到指示free(father->left)时,我的计划失败了。我无法弄清楚为什么程序崩溃,即使我确信father->left包含我试图摆脱的节点的内存地址。发生了什么事?

     Nodo *destroy_a_node(Nodo *root, Nodo *father, const int value)
        {
            if (root != NULL)
            {
                if ((root->value) > value)
                {
                    root->left = destroy_a_node(root->left, root, value);
                }
                else if ((root->value) < value)
                {
                    root->right = destroy_a_node(root->right, root, value);
                }
                else
                {
                    printf("I am %d and my father is %d\n", root->value, father->value);
                    if (has_no_children(root))
                    {
                        if (father->left == root)
                        {
                            free(father->left);
                            father->left = NULL;
                        }           
                    }
                         // More code to come...
                }
            }
            return root;
        }
    

0 个答案:

没有答案