2017-06-19 5 views
0

Ich arbeite derzeit an einer C++ - Implementierung eines binären Suchbaums. Alles scheint perfekt zu funktionieren, aber meine Suchfunktion gibt mir Probleme.C++ Segmentierungsfehler 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); 
      } 
    } 
} 

Das gibt mir einen Segmentation Fault jedes Mal, wenn ich für einen Schlüsselwert zu suchen, die nicht in dem Baum ist, und wenn der Knotenwert NULL (wie beispielsweise einen Wert ist, der entweder der max wäre oder wenn es min waren enthalten).

+0

Klingt, als ob Sie einen Debugger verwenden müssen. Und Sie überprüfen, ob 'x' null ist, nachdem Sie es dereferenziert haben. –

+0

Ich habe noch nie einen Debugger in einer UNIX-Umgebung verwendet, angenommen, ich sollte herausfinden, wie man das jetzt macht = P. – DJWright97

Antwort

0

Zuerst den Nullzeiger und dann den Rest prüfen. Wenn x NULL ist, wird der Zugriff auf den Schlüssel durch x->key zu einem Segmentierungsfehler führen.

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

Dang es! Ich wusste, dass es etwas Dummes sein würde, das ich vermisste. Vielen Dank. – DJWright97