1.
a.千万不要返回局部对象的引用 b.千万不要返回指向局部对象的指针
#include <iostream>
using namespace std;
int *get11()
{
int p=11;
return &p;
}
int main()
{
int *str;
str=get11();
printf("%d\n",*str);
return 0;
}
结果输出:11
问:程序输出 100.为什么?函数不是不能返回局部变量的地址吗?
答:简单说来:这次运气好,内存还未被回收还未被改写,所以能得到正确结果。但如果访问被保护的内存,甚至出现严重错误。
局部变量存放在栈中,当函数调用结束以后,系统自动回收存放局部变量的内存(即表示告诉被人该内存可以被使用),但是在该内存被别人使用之前,这段内存还是存放之前的值,由于这段程序简单,该段内存还未被别人修改,只是“巧合”的得到了正确的值。下面的程序显示了,该内存被修改了。。。。。。。。
int *get11()
{
int p=9;
return &p;
}
void get22()
{
int a=22;
}
int main()
{
int *str;
str=get11();
get22();
printf("%d\n",*str);
return 0;
}
结果输出:22
2.函数返回值存到的临时“空间”的剖析