关于返回指针的Segfault

时间:2014-03-26 02:23:04

标签: c++ pointers segmentation-fault

我正在搜索Contact对象的向量(虽然对象的类型不应该影响任何东西)并返回指向该对象的指针(如果找到它),否则返回null。以下是代码:

Contact* searchByLastName(string lname) {

for (auto iter = LIST.begin(); iter != LIST.end(); ++iter) {
    Contact c = *iter; //Dereference 
    if (lname.compare(c.getLastName()) == 0) {
        return &c;
    }
}
return NULL;
}

如果方法返回NULL(即在LIST中找不到联系人),则代码正常。如果联系人在列表中,则程序会出现段错误。

我尝试过使用nullptr而不是NULL并返回一个void指针而不是一个空指针(如果结果不是NULL / nullptr,则返回一个static_cast返回Contact *。)

我不确定为什么会出现这种情况。我知道在C ++中NULL被定义为0,但是使用nullptr(它应该只是一个void *类型的指针,对吗?)并没有停止segfaulting。

3 个答案:

答案 0 :(得分:3)

由于您返回一个指向Contact的指针,因此返回迭代器指向的任何内容

return &(*iter);

而不是

return &c;

答案 1 :(得分:2)

您返回局部变量的地址(c)。

答案 2 :(得分:1)

您正在返回一个局部变量的地址,一旦函数searchByLastName退出,它将被销毁。你应该返回一个指向迭代器所指向的指针。