我正在搜索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。
答案 0 :(得分:3)
由于您返回一个指向Contact的指针,因此返回迭代器指向的任何内容
return &(*iter);
而不是
return &c;
答案 1 :(得分:2)
您返回局部变量的地址(c
)。
答案 2 :(得分:1)
您正在返回一个局部变量的地址,一旦函数searchByLastName退出,它将被销毁。你应该返回一个指向迭代器所指向的指针。