Итак, проблема, с которой я столкнулся — это ошибка сегментации.
Я пытаюсь реализовать AVLtree, и я считаю, что эта часть моего кода является проблемой, но я не могу точно определить, что я сделал неправильно.
Часть моего класса AVLtree:
Node* AVLtree::findNode(string cityID){
Node *thisNode = this->rootNode;
while(thisNode!=0){
if(thisNode->getCity()->getName().compare(cityID)==0){return thisNode;
}else if(thisNode->getChildR()->getCity()->getName() < cityID){ thisNode = thisNode->getChildR();
}else{thisNode = thisNode->getChildL();}
}
return this->rootNode;
}
Мой основной файл:
int main(){
....
City city1("BoomTown", "EU", 1.01, 2.02);
....
AVLtree avltree1(&city1);
cout<< "TEST 1: AVLtree with city paramter of city1 (" << city1.getName()<< ")" << endl;
cout << "TEST 2: Getting name of city1: " << avltree1.findNode("BoomTown")->getCity()->getName() << endl;
Мой класс City и классы Node оба работают, и я могу создать AVLtree. Я просто не могу найти узел внутри него.
Вот мой вывод:
$ ./mainTest
TEST 1: AVLtree with city paramter of city1 (BoomTown)
Segmentation fault (core dumped)
Извините, если это простая ошибка, но я новичок в C ++ и требует времени и практики, чтобы выучить 🙂
Заранее спасибо.
(p.s. Если вам нужно больше кода, пожалуйста, спросите)
В вашем коде кажется, что вы проверяете, является ли текущий узел нулевым, но вы не проверяете, является ли дочерний узел нулевым, прежде чем получить к нему доступ:
while(thisNode!=0) {
// ...
if(thisNode->getChildR()->getCity()->getName() < cityID){
^^^^^^^^^^^
here
Возможно, проблема связана с тем, что вы не проверяете, возвращают ли ваши методы указатель на проппер. Если вы попытаетесь вызвать метод для недопустимого указателя, вы получите ошибку сегментации.
В твоем случае:
если thisNode->getChildR()
на самом деле не возвращает действительный указатель, вызывая getCity()
делает дамп ядра.