2013-10-14 109 views
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); 


} 
+1

無論你正在試圖做的,這種方式是[未定義行爲( http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope)。 – chris

回答

3

您正在返回對局部變量的引用。當find1函數返回時,對象final被銷燬。

更新

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

vector<int> find1(string &search_word) 
6
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);