程序接收信号SIGSEGV,分段故障

fal*_*ick 8 c++ signals segmentation-fault

好的...我正在把我的头发撕掉......当我传递一个名为"name"的字符串,内容为"joel"时,为什么我会出现分段错误

void person::setName(string newName)
{
    personName = newName;
}
Run Code Online (Sandbox Code Playgroud)

头文件:

class person {
public:
    int getID();
    string getName();

    void setID(int newID);
    void setName(string newName);
private:
    int personID;
    string personName;

};
Run Code Online (Sandbox Code Playgroud)

顺便说一句...函数调用是由一个孩子,虽然我不知道这可能会导致一个问题.

mgi*_*uca 18

如果您使用的是Linux,请尝试运行valgrind.你只需编译-g(使用gcc),然后valgrind在前面运行你的程序:

$ valgrind myprogram
Run Code Online (Sandbox Code Playgroud)

与GCC解决方案(告诉您何时发生段错误)不同,valgrind通常会告诉您第一次发生内存损坏的确切时间,因此您可以更接近其来源捕获问题.

PS.它与"燧石"押韵,而不是"发现".

  • +1给出正确的valgrind发音('valgreend') (2认同)

seh*_*ehe 2

您可能正在取消引用流氓指针。纯粹的猜测,你是否得到过这样的东西,也许:

 Person persons[10];

 for (i=1; i<=10; i++)
     persons[i].setName("joel");
Run Code Online (Sandbox Code Playgroud)

问题可能是:

  • 错误如图所示,索引是从0开始的,所以你需要for (i=0; i<10; i++)
  • 如果数组是动态分配的,但索引仍然越界

实际上可能有数百个其他原因,但由于我没有你的代码,这是我尝试猜测最可能的错误;)

自我提醒:我为什么要这样做/我没有通灵能力?