Je travaille sur un arbre de recherche binaire en C ++. Je reçois les erreurs suivantes signalées après l'exécution gdb (je reçois une erreur de segmentation) sur mon programme:
#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
Le # 0 erreur fait référence à ma fonction getLeft (), qui est la suivante:
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>*
}
Le # 1 erreur fait référence à mon opérateur ++ défini dans mon itérateurs, qui est la suivante:
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;
}
Le # 2 erreur fait référence à mon programme principal, dans lequel je suis, y compris le fichier qui contient mes définitions pour tree_node, BinaryTree, bst_iter et bst_citer (qui n'existe pas à ce stade, donc pas un problème).
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);
}
Je ne suis pas tout à fait sûr ce qui cause l'erreur. Je crois que ++ () tente d'accéder à une zone qui n'a pas été défini, mais je ne suis pas vraiment sûr pourquoi il fait ça, ou comment arrêter ... J'ai essayé de retenir le code, comme le code est près de 800 lignes, mais si plus d'information est nécessaire, laissez-moi savoir ...













