C 删除二叉树中产生随机分段错误的所有

C 删除二叉树中产生随机分段错误的所有,c,recursion,binary-tree,C,Recursion,Binary Tree,所以我有一个完整的程序,将值添加到二叉树中。然后,它可以按预顺序、后顺序和顺序列出值。现在一切都很顺利,除了我运行我的deleteAll函数时,它会使程序不稳定,并且在添加值或列出树时会随机产生分段错误。我不确定到底出了什么问题,我对C还是个新手,不知道是什么原因造成的。它显然在deleteAll函数中,所以它在这里 void deleteAll(node* *hd){ node* curr = *hd; if(curr->left != NULL){ de

所以我有一个完整的程序,将值添加到二叉树中。然后,它可以按预顺序、后顺序和顺序列出值。现在一切都很顺利,除了我运行我的
deleteAll
函数时,它会使程序不稳定,并且在添加值或列出树时会随机产生分段错误。我不确定到底出了什么问题,我对C还是个新手,不知道是什么原因造成的。它显然在
deleteAll
函数中,所以它在这里

void deleteAll(node* *hd){
    node* curr = *hd;
    if(curr->left != NULL){
        deleteAll(&curr->left);
    }
    if(curr->right != NULL){
        deleteAll(&curr->right);
    }
    free(curr);
}
在我删除所有并以任何顺序列出之后,它将给我一些值,比如321294124,当它不存在时,您知道这些值。我想这没关系,但也许这就是问题所在

void deleteAll(node* *hd){
if(*hd != NULL){
    node* curr = *hd;
    if(curr->left != NULL){
        deleteAll(&curr->left);
    }
    if(curr->right != NULL){
        deleteAll(&curr->right);
    }
    free(curr);
    *hd = NULL;
}
}

多亏了arrowdodger,我猜你忘了将某个值设置为
NULL
*hd=NULL;这是正确的吗?你能提供一些关于传递给函数“deleteAll”的参数的信息吗?