C++"返回局部变量的引用"

Mdj*_*n26 1 c++

我的这个功能出错了.说"警告:引用局部变量'最终'返回"任何想法有什么问题吗?以及如何解决它?

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);


}
Run Code Online (Sandbox Code Playgroud)

0x4*_*2D2 6

std::vector<int>& find1(std::string& search_word)
{
Run Code Online (Sandbox Code Playgroud)

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

    std::vector<int> final;
Run Code Online (Sandbox Code Playgroud)

这是具有自动存储持续时间的局部变量.在此函数结束时(意味着右括号),向量将被释放并从堆栈中删除.

     ...
     return final;
}
Run Code Online (Sandbox Code Playgroud)

因此,通过引用从函数返回局部变量是Undefined Behavior.您的程序现在处于不正常状态.

int main()
{
    ...
    std::vector<int>& p = find1(search);
}
Run Code Online (Sandbox Code Playgroud)

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

要修复,按值返回:

std::vector<int> find1(std::string& search_word)
Run Code Online (Sandbox Code Playgroud)

另外,使用对象,而不是引用:

std::vector<int> p = find1(search);
Run Code Online (Sandbox Code Playgroud)