计划接收信号SIGSEGV,分割过错
好吧...我撕扯我的头发......为什么我会得到分割fauls当我路过一个叫“名”的内容是“乔尔”串入计划接收信号SIGSEGV,分割过错
void person::setName(string newName)
{
personName = newName;
}
头文件:
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");
的问题可能是:
- 像显示的错误,该指数是基于0的,所以你需要
for (i=0; i<10; i++)
- 如果数组是动态分配的,但索引仍然超出范围
有几百个其他原因,但由于我没有你的代码,这是我的试图猜测最可能的错误;)
(注意自我:为什么我这样做/我不是精神病?)
如果您在Linux上,请尝试运行valgrind。你只是-g
(用gcc)编译,然后用valgrind
在前面运行程序:
$ valgrind myprogram
与海湾合作委员会的解决方案,它告诉你什么时候该段错误发生时,的valgrind通常会告诉你什么时候第一个内存破坏发生,所以你可以更接近问题的来源。
PS。它用“燧石”押韵,而不是“发现”。
+1给valgrind('valgreend')的正确发音 – 2012-09-28 15:36:31
除了您始终复制字符串的事实外,代码看起来很好。取而代之的
void setName(string newName);
应该
void setName(const string& newName);
问题必须在方法调用。
-1:你只说“看起来不错”而没有任何解决问题的尝试。你提供的小细节大多是不相关的,因为字符串是否被复制一次或两次不应该在这里产生任何影响。充其量,你的文章应该是对原始问题的评论。很可能你没有评论所需的要点,只是试着回答一些分数 - 但要合理地做。这个问题(也是你的答案)缺乏细节,在未来很难帮助任何人。你不太可能在这篇文章中得分,并有评论答案。 – quetzalcoatl 2014-07-17 15:20:19
“问题必须在方法调用中。”这意味着代码很差,但没有错误。 – user3849792 2014-11-17 12:42:35
另外...它运行在以前的无故障...它只是不喜欢这个迭代...我会链接的代码,但它的桶X的东西( – falconmick 2011-05-02 11:34:38
我不认为你的问题是这个功能。你可能想看看你是如何创建/访问你正在使用的人物对象的。 – 2011-05-02 11:35:34
你的代码示例是正常的,segfault是在其他地方引起的。请使用调试器遍历代码以找到代码行导致错误 – 2011-05-02 11:36:53