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



我收到一个"释放的指针未分配"错误。现在我知道这个节点实际上存在于我的树中(考虑到我的插入和搜索是有效的),但当我去删除一个节点时,我会遇到一个错误。如对此有任何见解,我们将不胜感激。

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

最新更新