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