我正在编写一个使用二叉树数据结构的程序。在编写释放所有节点的例程时,我遇到了一个我无法解释的特殊问题。
这是常规:
void destroy_tree(NodeT **tree){
if( *tree != NULL ){
destroy_tree( &(*tree)->left );
free( (*tree)->left );
destroy_tree( &(*tree)->right );
free( (*tree)->right );
}
return;
}
基本上一个 2 星指针被传递给函数。它在继续释放指针之前检查每个节点是否为 NULL。NodeT
是一个包含指向 NodeT 结构的左右指针的结构;这些是我试图释放的指针。
结构定义为:
typedef struct{
int val;
struct tnode *right, *left;
}NodeT;
如果没有 free() 调用,任何事情都不会像您期望的那样发生。但是,当取消注释免费呼叫时,输出如下所示:
每次我运行程序时,数字块都会改变,但它们总是重复并最终崩溃。
对这个函数的原始调用是你所期望的,
destroy_tree(&rootNode);
其中 rootNode 是:NodeT *rootNode
;
有任何想法吗?