读书人

这两个简单程序如何运行不一样

发布时间: 2013-09-17 13:35:59 作者: rapoo

这两个简单程序怎么运行不一样?

                                                  局部变量                                              
[解决办法]
第一:
int* x=fun();
编译错误,fun()的返回值是void*

第二:
返回临时变量的地址,本来就是错误的。
两次结果不一样,因为调用printf函数,使得栈上x地址的内容被改写了。

结论,不要去纠结为啥结果不一样,本来就是错的。即使程序2看起来结果正确,也是错的。

[解决办法]

答案正确只是内存还没擦除而已!但是结果是无法保证的,
返回局部变量地址本来就是很不安全,甚至可以说是一个错误的动作!
所以不要为这个问题伤脑筋了!

[解决办法]
函数返回后,临时变量内存空间就被释放了,之后内容随机,无意义

读书人网 >C语言

热点推荐