Pracuji na strom binárního vyhledávání v C ++. Začínám následující chyby hlášené po spuštění gdb (mám příjem segfault) na svém programu:
#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
Chyba # 0 se vztahuje k mé funkci getLeft (), která je takto:
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>*
}
Došlo k chybě # 1 odkazuje na mé operátora ++ definované v mých iterátorů, což je následující:
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;
}
Došlo k chybě # 2 se týká mého hlavního programu, ve kterém jsem včetně souboru, který obsahuje své definice tree_node, binaryTree, bst_iter a bst_citer (který neexistuje v tomto bodě, a tak není problém).
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);
}
Nejsem si úplně jistý, co je příčinou chyby. Domnívám se, že ++ () se pokouší o přístup do oblasti, která nebyla definována, ale nejsem si úplně jistý, proč to dělá to, nebo jak to zastavit ... Snažil jsem se držet zpátky na kódu, jako kód je téměř 800 linek dlouho, ale pokud je potřeba více informací, dejte mi vědět ...













