C++中出现"引用局部变量被返回"错误

3
我使用这个函数时出现了错误,提示“警告:返回对局部变量'final'的引用”,你有什么想法是哪里出错了吗?应该怎么修复它?
vector<int> & find1(string &search_word)
{
    vector<int> final;
final.push_back(2);
final.push_back(5);


return (final); //This is giving me the error when I try to return the vector.

}

int main ()

{
string search;

cin >> search;

vector <int> &p = find1(search);


}

1
无论你尝试做什么,这种方式都是未定义行为 - chris
2个回答

8
std::vector<int>& find1(std::string& search_word)
{

在这里,你返回的是一个引用。引用是一个对象的别名。此函数返回的对象将绑定到引用并返回给调用者。

    std::vector<int> final;

这是一个具有自动存储期限的局部变量。在该函数结束时(即闭括号),向量将被释放并从堆栈中清除。
     ...
     return final;
}

由于这个原因,从函数中通过引用返回一个局部变量是未定义行为。你的程序现在处于不良状态。
int main()
{
    ...
    std::vector<int>& p = find1(search);
}

p也是一个引用,意味着它是返回对象的别名。这是错误的,因为你认为返回的对象实际上在函数返回时已经被释放了。

为了解决这个问题,请通过值返回:

std::vector<int> find1(std::string& search_word)

同时,使用对象而不是引用:
std::vector<int> p = find1(search);

3
你正在返回一个局部变量的引用。当 find1 函数返回时,对象 final 会被销毁。
更新:
vector<int> & find1(string &search_word)
//          ^^

为了

vector<int> find1(string &search_word)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接