繁体   English   中英

程序接收信号 SIGSEGV,Segmentation fault

[英]Program received signal SIGSEGV, Segmentation fault

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

void person::setName(string newName)
{
    personName = newName;
}

Header 文件:

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

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

};

顺便说一句... function 电话是由一个孩子来的,尽管我不明白这会如何导致问题。

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

$ valgrind myprogram

与 GCC 解决方案不同,后者会告诉您何时发生段错误,而 valgrind 通常会准确地告诉您第一次 memory 损坏发生的时间,因此您可以更接近问题的根源。

PS。 它与“flint”押韵,而不是“find”。

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

 Person persons[10];

 for (i=1; i<=10; i++)
     persons[i].setName("joel");

问题可能是:

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

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

自我注意:我为什么要这样做/我不是通灵者?

除了您一直在复制字符串这一事实之外,该代码看起来还不错。 代替

void setName(string newName);

应该

void setName(const string& newName);

问题必须在方法调用中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM