博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
char *fun(void)
{
char *p="hello";
return p;
}

int main(void)
{
char *s;
s=fun();
printf("%s\n",s);
}

程序运行后有什么问题呢?

一般人可能会回答说是内存错误,实际上不是,

char *p="hello";

分配在常量区,不会立即释放。

 

如果是如下的程序

char *fun(void)
{
char p[]="hello";//注意
return p;
}
int main(void)
{
char *s;
s=fun();
printf("%s\n",s);
}

很多人回答说是会出错。而我在运行过程中,却没发现出错。

原因如下:

如果对已经释放了的内存进行读写操作,那这个行为导致的结果是未定义的。
“未定义”就是说随着程序的运行情况而定,有时候这次运行你去读,没有问题,依旧能读取东西出来;但是下一次运行,未必能成功。更严重的情况就是导致崩溃。
 


posted on 2010-12-24 09:56  Likwo  阅读(372)  评论(0编辑  收藏  举报