局部变量的释放

板凳宽 2008-06-16 02:38:53
程序如下:
char* getstring(void)
{
char array[] = "hello world";
return array;
}

int main(void)
{
char* str = getstring();//breakpoint 1
printf("%s",str)//breakpoint 2
return 0;
}

hi all,在不考虑上面程序的功能情况下,个人想问的就是:debug状态下,上面程序执行到breakpoint 2的时候,按照,局部变量(当然是指非静态的)在函数执行完毕后就会被释放掉的说法,此时,此前array在stack里分配的内存单元应该被释放掉了,但是memory里的内容还是hello world,但在执行printf函数中就会释放掉,这个怎么解释?望大虾解答..不胜感激...

个人愚见就是:下一次需要用到stack分配内存的时候,才会释放上一次stack分配的.(详见下面程序)
char* getstring(void)
{
char array[] = "hello world";
return array;
}

int main(void)
{
char* str = getstring();//breakpoint 1
static a;
a = 10;     //breakpoint 2
printf("%s",str)//breakpoint 3
return 0;
}
由于a是静态变量,在静态存储区分配内存,所以执行完语句a = 10; stack里array的内容还没释放掉...
...全文
356 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
板凳宽 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 DarknessTM 的回复:]
所谓的释放,只是移动了下堆栈的TOP指针,具体表现为 add esp,xx
所有堆栈里的这部分数据在下次使用堆栈前 不会消失
[/Quote]
那意思就是在下一次用堆栈前,数据暂时还不会消失...
liangchencf 2008-06-16
  • 打赏
  • 举报
回复
根几遍反汇编lz就清楚了
zjw6861982 2008-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 DarknessTM 的回复:]
堆内存和LS几位说的类似

但其实 栈内存的变化还是可以预见的
[/Quote]
强!
DarknessTM 2008-06-16
  • 打赏
  • 举报
回复
堆内存和LS几位说的类似

但其实 栈内存的变化还是可以预见的
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sansky99 的回复:]
好比你租住的房子的退租了,房东何时打扫,何时再出租都与你无关,你不能指望的遗落的钱包一定能捡回来
[/Quote]
好例子……
sansky99 2008-06-16
  • 打赏
  • 举报
回复
好比你租住的房子的退租了,房东何时打扫,何时再出租都与你无关,你不能指望的遗落的钱包一定能捡回来
野男孩 2008-06-16
  • 打赏
  • 举报
回复
要搞清楚释放的含义。什么叫释放,所谓释放只不过是内存的使用权已经归还给了系统,不归你使用了。至于系统怎么用这块内存,跟你没关系。你非要用的话,可能有用,可能没用,后果自负。
DarknessTM 2008-06-16
  • 打赏
  • 举报
回复
内存释放不是把这段内存 填充为0,而是标记为无效或者是可以被覆盖
为了性能考虑
lionc650 2008-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 DarknessTM 的回复:]
所谓的释放,只是移动了下堆栈的TOP指针,具体表现为 add esp,xx
所有堆栈里的这部分数据在下次使用堆栈前 不会消失
[/Quote]
学习.....
leelittlelong 2008-06-16
  • 打赏
  • 举报
回复
不管怎么解释,这种用法是错误的危险的,
不要去碰他。。

没释放掉是偶然的,可能换个编译器就已经释放掉了。
yyyapple 2008-06-16
  • 打赏
  • 举报
回复
静态变量和局部变量所在内存区域不同,局部变量内存空间是可以随时回收的。
DarknessTM 2008-06-16
  • 打赏
  • 举报
回复
所谓的释放,只是移动了下堆栈的TOP指针,具体表现为 add esp,xx
所有堆栈里的这部分数据在下次使用堆栈前 不会消失

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧