2017-09-02 68 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不会被销毁,当程序终止时它将被销毁。