【问题标题】:C++" reference to local variable returned "C++" 对局部变量的引用返回"
【发布时间】:2013-10-15 08:00:21
【问题描述】:

我在使用此功能时遇到错误。说“警告:对返回的局部变量‘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);


}

【问题讨论】:

标签: c++


【解决方案1】:
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);

【讨论】:

    【解决方案2】:

    您正在返回对局部变量的引用。当find1函数返回时,对象final被销毁。

    更新

    vector<int> & find1(string &search_word)
    //          ^^
    

    vector<int> find1(string &search_word)
    

    【讨论】: