Ошибка сегментации C ++ (ядро сброшено)

Итак, проблема, с которой я столкнулся — это ошибка сегментации.
Я пытаюсь реализовать 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. Если вам нужно больше кода, пожалуйста, спросите)

0

Решение

В вашем коде кажется, что вы проверяете, является ли текущий узел нулевым, но вы не проверяете, является ли дочерний узел нулевым, прежде чем получить к нему доступ:

while(thisNode!=0) {
// ...
if(thisNode->getChildR()->getCity()->getName() < cityID){
^^^^^^^^^^^
here
1

Другие решения

Возможно, проблема связана с тем, что вы не проверяете, возвращают ли ваши методы указатель на проппер. Если вы попытаетесь вызвать метод для недопустимого указателя, вы получите ошибку сегментации.

В твоем случае:
если thisNode->getChildR() на самом деле не возвращает действительный указатель, вызывая getCity() делает дамп ядра.

1

По вопросам рекламы [email protected]