关于返回局部变量的指针或引用

时间:2021-03-30 13:39:37

C++ primer中说“不要返回局部变量中的引用和指针”

但是今天一个简单的程序跑出来结果正确,很诧异……

int *fun1()
{
int i = 100;
int *j = &i;
return j;
}
int &fun2()
{
int i = 100;
return i;
}
int main()
{
int *p = fun1();
cout << *p << endl; //编译通过,输出结果为100
int &m = fun2();
cout << m<< endl; //编译通过,输出结果为100
}

网上查了下原因,是因为局部变量确实保存在堆栈中,但是函数调用完成数据并没有立即被清空,释放变量内存的意思是该内存可以被其他对象使用。也就是说,在没有其他数据对该内存进行覆盖前,内存中的原数据可用。

int *fun1()
{
int i = 100;
int *j = &i;
return j;
}
int &fun2()
{
int i = 100;
return i;
}
int main()
{
int *p = fun1();
cout << *p << endl; //编译通过,输出结果为100
cout << *p << endl; //再次输出,输出结果不定
int &m = fun2();
cout << m<< endl; //编译通过,输出结果为100
cout << m<< endl; //再次输出,输出结果不定
}