以下程序给出了运行时错误(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 :(得分:4)
是的,它确实是一个未定义的行为,因为你正在返回对自动变量的引用,当bar()
的执行完成时将被销毁
你可以通过写:
来避免它#include <iostream>
using namespace std;
int& bar()
{
static int n = 10;
return n;
}
int main() {
int& i = bar();
cout<<i<<endl;
return 0;
}
在这种情况下,当n
的执行完成时,静态变量bar()
将不会被销毁,当程序终止时它将被销毁。