セグメンテーションフォールトが返され続けるため、この機能を実行できません。私はそれを「削除ルート」に絞り込んだ。このエラーを修正する方法はわかりません。バイナリ検索ツリー内のすべての値を削除するとセグメンテーションフォルトが発生する
提案がありますか?
はここで割り当てに含ま事前と事後条件である:
//前提条件:rootはバイナリ検索 ツリーのルートへのポインタです。
// Postcondition:この関数は、バイナリ検索 ツリーのすべてのノードを削除し、// rootをNULLに設定します。
template<class Key, class Item>
void tree_clear(bstNode<Item, Key>*& root)
{
bstNode<Item, Key>* child;
if(root != NULL)
{
child = root->left();
tree_clear(child);
child = root->right();
tree_clear(child);
delete root;
root = NULL;
}
}
非常に深いノードで - > left()および - > right()から返されるものは何ですか?これらの関数が最も深いノードでNULLを返さない場合は、segfaultを取得する可能性があります。 – akatakritos
あなたのtree_clearは参照を必要とするので、tree_clear(NULL)を呼び出すのが悪いですか? –
彼はNULLをチェックしています。私は、これらの関数が最も深いノードに対して呼び出されると、何らかのランダムなポインタを返すかもしれないと考えています。そのランダムポインタはヌルではないので、それをtree_clearにして削除しようとします。 – akatakritos