Ich arbeite an einem binären Suchbaum in C ++. Ich erhalte die folgenden Fehler gemeldet, nachdem gdb läuft (ich bin ein segfault Empfang) auf meinem Programm:
#0 0x08049058 in searchTree::tree_node<int>::getLeft (this=0x0) at bst.hxx:75
#1 0x08048ed8 in searchTree::bst_iter<int>::operator++ (this=0xbffff4b4) at bst.hxx:586
#2 0x08048a72 in main () at projectmain.cxx:29
Die # 0 Fehler beziehen sich auf mein getLeft () Funktion, die wie folgt lautet:
template <typename T>
inline tree_node<T>* tree_node<T>::getLeft() const
{
return tree_node<T>::left_; //note that left_ is of type tree_node<T>*
}
Die # 1 Fehler bezieht sich auf meinen Operator ++ definierte in meinem Iteratoren, die wie folgt lautet:
bst_iter<T>& operator++()
{ //note that s is a stack of tree_node<T>*
tree_node<T> *p = pos_->getRight();
s.push(p);
for(p=p->getLeft(); p!=NULL; p=p->getLeft())
{
s.push(p);
}
pos_ = s.top();
s.pop();
return *this;
}
Die # 2 Fehler bezieht sich auf mein Hauptprogramm, in dem ich die Datei bin auch, dass meine Definitionen für tree_node enthält, BinaryTree, bst_iter und bst_citer (die an dieser Stelle nicht existiert, so kein Problem).
bst_iter<int> i = treeTime.begin(); //treeTime is our tree
bst_iter<int> iEnd = treeTime.end();
for(; i != iEnd ;++i) //crash
{
cout<<*i<< ;
}
template <typename T>
inline bst_iter<T> binaryTree<T>::begin()
{
return bst_iter<T>(root_);
}
template <typename T>
inline bst_iter<T> binaryTree<T>::end()
{
return bst_iter<T>(0);
}
Ich bin mir nicht ganz sicher, was den Fehler verursacht. Ich glaube, dass ++ () versucht, einen Bereich zuzugreifen, die nicht definiert wird, aber ich bin nicht wirklich sicher, warum es das, oder wie macht es zu stoppen ... Ich habe versucht, auf dem Code zurück zu halten, wie der Code fast 800 Zeilen lang ist, aber wenn mehr Informationen erforderlich sind, lassen Sie mich wissen ...













