2017-09-02 100 views
-2

以下程序給我的運行時錯誤(Segmentation Fault(SIGSEGV))。什麼是懸掛參考?

#include <iostream> 
using namespace std; 

int& bar() 
{ 
    int n = 10; 
    return n; 
} 

int main() { 
    int& i = bar(); 
    cout<<i<<endl; 
    return 0; 
} 

我的老師告訴我這是一個未定義的行爲,因爲懸掛參考。他對嗎? 如果是,那麼如何避免它?

+0

有一個很好的副本。 – hyde

+0

是的,當你的電腦抱怨電腦的東西時,你的電腦是正確的。那麼,**是什麼**確切的錯誤?將錯誤消息複製並粘貼到您的問題中。我不確定你會得到* runtime *錯誤;你的編譯器應該已經警告你了。 –

+4

谷歌再次下跌? – molbdnilo

回答

2

是的,這的確是一個未定義的行爲,因爲你正在返回自動變量的引用時bar()執行完成

您可以通過書面形式避免它,這將被銷燬:

#include <iostream> 
using namespace std; 

int& bar() 
{ 
    static int n = 10; 
    return n; 
} 

int main() { 
    int& i = bar(); 
    cout<<i<<endl; 
    return 0; 
} 

在這種情況下,當bar()執行完成時,靜態變量n不會被銷燬,當程序終止時它將被銷燬。