Pracuję na binarne drzewo poszukiwań w C ++. Dostaję następujące błędy zgłoszone po uruchomieniu gdb (ja dostaję segfault) na moim programie:
#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
Przyciski # 0 błędu odnosi się do mojego getLeft function (), która jest w następujący sposób:
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>*
}
Błąd nr 1 odnosi się do mojego operatora ++ określonym w moich iteratorów, który brzmi następująco:
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;
}
Błąd nr 2 odnosi się do mojego głównego programu, w której jestem w tym pliku, który zawiera moje definicje tree_node, binaryTree, bst_iter i bst_citer (który nie istnieje w tym momencie, więc nie 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);
}
Nie jestem do końca pewien, co jest przyczyną błędu. Wierzę, że ++ () próbuje uzyskać dostęp do obszaru, który nie został zdefiniowany, ale nie jestem pewien, dlaczego to robi, że albo jak go zatrzymać ... Starałem się powstrzymać od kodu, jak kod ma prawie 800 linii, ale jeśli jest wymagana więcej informacji, daj mi znać ...













