C++ 分段错误(核心转储)

C++ Segmentation error(core dumped)

本文关键字:转储 核心 分段 错误 C++      更新时间:2023-10-16

所以我遇到的问题是分割错误。我正在尝试实现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++新手,需要时间和练习来学习:)提前谢谢。

(附言如果您需要更多代码,请询问)

在您的代码中,您似乎检查当前节点是否为 null,但在访问它之前您没有检查子节点是否为 null:

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

该问题可能与您没有检查方法是否返回 propper 指针有关。如果尝试在无效指针上调用方法,则会出现分段错误。

在您的情况下:如果thisNode->getChildR()实际上没有返回有效的指针,则调用getCity()将进行核心转储。