从btree删除 - 被释放的指针未被分配

时间:2014-08-28 04:20:14

标签: c pointers tree binary-tree

我正在获得一个被释放的指针未分配'错误。现在我知道节点实际存在于我的树中(假设我的插入和搜索工作),但是当我去删除节点时我收到错误。任何有关这方面的见解将不胜感激。

int set_delete(set_t *set, int del_val)
{
    /* TODO: readd delete child nodes */

    struct tree_node *node;

    node = set->root;
    *node = tree_search(&node, del_val);

    if (node != NULL) {
        free(node);
        return 1;
    }


    return 0;   
}

struct tree_node tree_search(struct tree_node **node, int search_val) {
    if(!(*node)) {
        return **node;
    }

    if ((*node)->val == search_val) {
        return **node;
    } else if ((*node)->val > search_val) {
        tree_search(&(*node)->left, search_val);
    } else if ((*node)->val < search_val) {
        tree_search(&(*node)->right, search_val);
    }

    return **node;

}

1 个答案:

答案 0 :(得分:0)

正如Nik Bougalis和Joachim Pileborg指出的那样,问题在于tree_search的回报价值。你必须返回一个指向节点的指针,以便可以使用free删除它,假设它当然是最初使用malloc分配的。

struct tree_node * tree_search( struct tree_node *node, int search_val)
{
      if( node == 0 )
      {
         return 0; // not found
      }
      if( node->val == search_val)
      {
         return node; // found
      }
      if( node->val > search_val)
      {
          return tree_search( node->left, search_val); // search left tree
      }
      return tree_search( node->right, search_val); // search right tree
}