BohYoh.comトップページへ

C言語によるアルゴリズムとデータ構造

戻る  

演習10-2の解答

 関数FreeTreeを以下のように実現するとどうなるかを説明せよ。

void FreeTree (BinNode  *p )
{
    if (p != NULL) {
        FreeTree(p->left );
        free(p );
        FreeTree(p->right);
    }
}


 この実現は誤りです。
 現在着目しているノードであるp を解放してしまうと、p->rightに正しくアクセスできなくなるからです(当然p->rightの指す記憶域の解放は正しく行えません)。
戻る