二分木データ構造を使用するプログラムを書いています。すべてのノードを解放するルーチンを書いているときに、説明できない奇妙な問題に遭遇しました。
これはルーチンです:
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
;
何か案は?