Δουλεύω σε ένα δυαδικό Αναζήτηση δέντρο σε C ++. Παίρνω τα ακόλουθα σφάλματα που αναφέρθηκαν μετά την εκτέλεση gdb (είμαι παραλαβή segfault) για το πρόγραμμα μου:
#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
Το σφάλμα # 0 αναφέρεται σε getLeft () λειτουργία μου, η οποία έχει ως εξής:
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>*
}
Το σφάλμα # 1 αναφέρεται σε χειριστή μου ++ ορίζεται στο iterators μου, η οποία έχει ως εξής:
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;
}
Το σφάλμα # 2 αναφέρεται στο κύριο πρόγραμμά μου, με τον οποίο έχω συμπεριλαμβανομένου του αρχείου που περιέχει τους ορισμούς μου για tree_node, binaryTree, bst_iter και bst_citer (η οποία δεν υπάρχει σε αυτό το σημείο, έτσι δεν είναι ένα ζήτημα).
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);
}
Δεν είμαι απόλυτα σίγουρος τι προκαλεί το σφάλμα. Πιστεύω ότι ++ () προσπαθεί να αποκτήσει πρόσβαση σε ένα χώρο που δεν έχει καθοριστεί, αλλά δεν είμαι σίγουρος γι 'αυτό που κάνει αυτό ή πώς να το σταματήσει ... Προσπάθησα να κρατήσει πίσω του κώδικα, όπως ο κώδικας έχει μήκος περίπου 800 γραμμές, αλλά αν χρειάζεται περισσότερες πληροφορίες, επιτρέψτε μου να ξέρω ...













