Ben C bir ikili arama Ağacı ++ üzerinde çalışıyorum. Benim program üzerinde (Ben segfault alıyorum) gdb çalıştırdıktan sonra bildirilen aşağıdaki hataları alıyorum:
#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 hatası aşağıdaki gibidir benim Getleft () işlevi, ifade eder:
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. hata aşağıdaki gibidir benim yineleyicileri tanımlanan zaman operatör ++ belirtir:
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. Hata İçinde tree_node benim tanımlarını içeren dosya dahil ediyorum, benim ana programa atıfta (bu noktada mevcut değil, yani değil bir sorun) BinaryTree, bst_iter ve 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);
}
Ben hataya neden ne tamamen emin değilim. Ben ++ () tanımlanmadığı bir alanı erişmeye çalışıyor inanıyoruz, ama bunu yaparken veya nasıl durdurulacağını neden gerçekten emin değilim ... Ben kodu olarak, kod üzerinde geri tutmaya çalıştı neredeyse 800 satır uzunluğundadır, ancak daha fazla bilgi gerekirse, bana bildirin ...













