我在这个函数上遇到错误。说" 警告:返回对局部变量'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);
}
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);
您正在返回对局部变量的引用。当find1
函数返回时,对象final
被销毁。
更新
vector<int> & find1(string &search_word)
// ^^
自
vector<int> find1(string &search_word)