Ik ben bezig met een binaire zoekboom in C ++. Ik krijg de volgende fouten gemeld na het uitvoeren van gdb (ik ben het ontvangen van een segfault) op het programma:
#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
De # 0 fout verwijst naar mijn getLeft () functie, luidt als volgt:
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>*
}
De # 1 fout betreft mijn operator ++ gedefinieerd in mijn iteratoren, luidt als volgt:
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;
}
De # 2-fout verwijst naar mijn belangrijkste programma, waarin ik ook het bestand dat mijn definities voor tree_node bevat, binaryTree, bst_iter en bst_citer (die niet bestaat op dit punt, dus geen probleem).
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);
}
Ik ben niet helemaal zeker wat de oorzaak van de fout. Ik geloof dat ++ () probeert toegang te krijgen tot een gebied dat niet is gedefinieerd, maar ik ben niet zeker waarom het is om dat te doen of hoe het te stoppen ... Ik heb geprobeerd om terug te houden op de code, zoals de code is bijna 800 regels lang, maar als er meer informatie nodig is, laat het me weten ...













