2017-06-19 18 views
0

私は現在、バイナリ検索ツリーのC++実装に取り​​組んでいます。すべてが完璧に動作しているように見えますが、私の検索機能が問題を起こしています。C++セグメンテーションフォールトBST

BinarySearchTree::node* BinarySearchTree::SEARCH(node* x, int key) 
{ 
    if(root == NULL) { 
      cout << "This is an empty tree." << endl; 
      return NULL; 

    } else { 
      if(x->key == key) { 
        return x; 
      } 
      if(x == NULL) { 
        cout << "Value not in tree." << endl; 
        return x; 
      } 
      if(key < x->key) { 
        return SEARCH(x->left, key); 
      } else { 
        return SEARCH(x->right, key); 
      } 
    } 
} 

これは私に私がツリーにないキー値を検索するたびにセグメンテーションフォールトを与え、ノードの値が(例えば、それならば最大または最小のどちらかだろう値としてNULLのとき含まれていた)。

+0

あなたはデバッガを使用する必要があります。そして、あなたが逆参照した後に 'x'がヌルであるかどうかチェックしています。 –

+0

私はUNIX環境でデバッガを使ったことがありません。どうすればよいのでしょうか? – DJWright97

答えて

0

NULLポインタを最初にチェックし、次に残りをチェックします。 xがNULLの場合、x->keyでキーにアクセスすると、セグメント化エラーが発生します。

if(x == NULL) { 
    cout << "Value not in tree." << endl; 
    return x; 
} 
if(x->key == key) { 
    return x; 
} 
... 
+0

ダングそれ!私はそれが私が行方不明だった何か愚かなものになるだろうと分かっていた。ありがとうございました。 – DJWright97

関連する問題