好的......我正在扯掉我的头发...当我传递一个名为“name”的字符串并将内容“joel”传入
时,为什么我会出现分段错误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;
};
btw ...函数调用是由孩子进行的,虽然我不知道这可能会导致问题。
答案 0 :(得分:18)
如果您使用的是Linux,请尝试运行valgrind。您只需使用-g
(使用gcc)进行编译,然后在前面使用valgrind
运行您的程序:
$ valgrind myprogram
与GCC解决方案不同,它告诉您何时发生段错误,valgrind通常会告诉您第一次发生内存损坏的确切时间,因此您可以更接近其来源捕获问题。
PS。它与“燧石”押韵,而不是“发现”。
答案 1 :(得分:1)
可能你正在取消引用一个流氓指针。通过纯粹的猜测,你有这样的事情,或许:
Person persons[10];
for (i=1; i<=10; i++)
persons[i].setName("joel");
问题可能是:
for (i=0; i<10; i++)
实际上可能有数百个其他原因,但由于我没有你的代码,这是我试图猜测最合理的错误;)
(自我注意:为什么我这样做/我不是通灵者?)
答案 2 :(得分:-2)
除了一直复制字符串这一事实外,代码看起来还不错。而不是
void setName(string newName);
应该是
void setName(const string& newName);
问题必须在方法调用中。