(可追加分)被调用函数结束是内存释放?

[复制链接]
查看11 | 回复1 | 2011-5-1 01:59:41 | 显示全部楼层 |阅读模式
比如一个程序:#includestdio.h
int*fun(inta);
voidmain()
{
inta=9;
printf(\"%d\",*fun(a));

}
int*fun(inta)
{
intb;
b=a2376;
return(
}fun函数结束时b的内存被释放,返回b的地址,为什么还能在访问呢?printf(\"%d\",*fun(a));释放内存又是怎么释放吗?(从计算机内部来看)。谢谢大家了!
被采纳的答案追加15分。
回复

使用道具 举报

千问 | 2011-5-1 01:59:41 | 显示全部楼层
这里涉及到堆和栈的问题,函数内部的局部变量,是被存储在栈内存里,是临时的;栈和堆的区别就是,栈内存不需要用户去申请和释放,而堆内存是需要用户自己申请,维护和释放的,例如,你用malloc函数申请了一块内存,你就必须使用free函数去释放掉它,不然,就会造成所谓的内存泄露,申请的内存就会一直不能再被使用,直到系统关机。

至于你说的为什么b的内存被释放了之后为什么还能被访问,是因为不管b的内存有没有被释放,b所在的内存地址的的确确是存在于系统中的,被释放了也还是存在的,只是这个函数执行完之后,它的内存里的内容可能会被改变。既然这个内存地址是存在的,那当然它里面也必然有值的,可以读。建议你用调试方法查看b的内存地址和内存里的内容。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行