使用一个函数内定义的变量的地址,安全吗?
比如这样:
int* retInt()
{
int i = 998;
return &i;
}
int main()
{
int* p = retInt();
cout<<*p<<endl;
return 0;
}
我试了下,输出的是998,但是不知道是不是安全。
[解决办法]
当调用函数时,函数为自身的局部变量在栈区上分配空间。当函数调用返回时,临时变量等都会随着栈区销毁
所以返回一个局部变量的引用导致难料的结果
[解决办法]
不安全,切记“不要返回局部对象的地址/引用”。
原因就是局部对象都在栈上,当函数返回的时候,栈即销毁,局部对象即不“存在”(内存位置还在那里,但已经没有逻辑意义了,可以被后续的压栈动作随意覆盖)。
还能打出“貌似正确的值”,只是说明了内存位置还在那里,而且刚好还没有发生覆盖,不能说明其合理性。