私は木を実装するC
プログラムを持っています。私のクリーンアップ機能は、次のようになります。私のツリー構造体は、私はこのようなツリーを初期化しています関数からメモリを解放できません
typedef struct TreeNode_st {
char *word; // the word held in this node
unsigned int frequency; // how many times it has been seen
struct TreeNode_st *left; // node's left child
struct TreeNode_st *right; // node's right child
} TreeNode;
あり
void cleanup_tree(TreeNode* root){
printf("Called\n");
if(root->left!=NULL){
cleanup_tree(root->left);
}
if(root->right!= NULL){
cleanup_tree(root->right);
}
if(root->right==NULL &&root->left==NULL) {
/*free(root);*/
free(root->word);
free(root);
root = NULL;
}
}
:私のmain
で
TreeNode* initTreeNode(){
TreeNode *mainNode= (TreeNode*)malloc(sizeof(TreeNode));
mainNode->frequency = 0 ;
mainNode->word = NULL;
mainNode->left = NULL;
mainNode->right = NULL;
return mainNode;
}
、私は
呼ばれていますTreeNode *mainNode =initTreeNode();
と私は私のcleanup_tree行の下
printf("~~~FINAL NULL TEST %s",mainNode->left->right->word);
、 を入れて、私はそれに作業をやっている、とだけプログラム終了前に、私はValgrindのは、これだけテストするために、メモリリークを報告
cleanup_tree(mainNode);
、私は をしたと呼ばれます私は今でもその言葉を見ることができます。
私は間違っていますか?
{if(root-> right == NULL && root-> left == NULL){'子ノードを持たないノードのみを解放しますか? –
私はその関数を再帰的に呼び出していますので、その変数を自由に設定する必要があります。親が子を持たないノードになり、ルートに移動します。 –
変数は自分自身を魔法に設定しませんしかし、NULLにする。 – tkausl