C++ 程序接收信号SIGSEGV,分段故障
好的。。。我在扯我的头发。。。当我将一个名为“name”且内容为“joel”的字符串传入时,为什么会出现分段错误 头文件: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; }; 顺便说一句。。。函
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);