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

C++ 程序接收信号SIGSEGV,分段故障,c++,signals,segmentation-fault,C++,Signals,Segmentation Fault,好的。。。我在扯我的头发。。。当我将一个名为“name”且内容为“joel”的字符串传入时,为什么会出现分段错误 头文件: class person { public: int getID(); string getName(); void setID(int newID); void setName(string newName); private: int personID; string personName; }; 顺便说一句。。。函

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

头文件:

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

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

};

顺便说一句。。。函数调用是由一个子函数调用的,尽管我不知道这怎么会导致问题。

可能是因为您取消了对恶意指针的引用。纯粹凭猜测,你有没有得到这样的东西,也许:

 Person persons[10];

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

对于(i=1;i如果您在Linux上,请尝试运行。您只需使用
-g
(使用gcc)进行编译,然后使用前面的
valgrind
运行您的程序:

$ valgrind myprogram
与GCC解决方案不同,它会告诉您SEGFULT发生的时间,valgrind通常会准确地告诉您第一次内存损坏发生的时间,因此您可以更接近问题的根源来发现问题


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

除了您一直在复制字符串之外,代码看起来很好。而不是

void setName(string newName);
应该是

void setName(const string& newName);

问题一定是在方法调用中。

另外……它在以前的迭代中运行,没有错误……它只是不喜欢这个迭代……我会链接代码,但是有很多东西(我认为你的问题不在于这个函数。你可能想看看你是如何创建/访问你正在使用的person对象的。你的代码示例很好,segfault是由其他地方引起的。请使用调试器逐步检查你的代码,以找到导致错误的代码行。嗯,你是说那个字符串吗“正在调试的程序…”是该变量的内容吗?非常奇怪。您能告诉我们故障发生在哪一行代码上吗?使用-g构建程序(如果使用GCC),然后在GDB中运行它。它会在出现错误时中断。如果您不知道自己在哪里,请键入
bt
,它将显示函数调用堆栈。查找堆栈,直到找到一些代码——这是出现错误的代码。@mgiuca:准确地说,这将是出现症状的代码行。实际错误可能在别处。+1给valgrind(‘Valgreund’)正确的发音-1:你只说“看起来不错”"没有任何解决问题的尝试。您提供的小细节基本上无关紧要,因为字符串复制一次或两次都不会对此处产生任何影响。充其量,您的帖子应该是对原始问题的评论。您可能不具备发表评论所需的要点,只需尝试实际回答即可有些分数-但要合理。这个问题(以及你的答案)缺乏细节,将来也不太可能帮助任何人。你不太可能在这篇文章和评论性答案中得分。“问题必须在方法调用中。”这意味着代码很差,但没有错误。
void setName(const string& newName);