函数体内动态分配的内存,在函数执行完后是否会释放?

comdoc_wang 2008-11-20 03:34:49
例如:
void fun()
{
char* s = (char*)malloc(100);
}

执行完 fun函数后,指针s是否会释放?
...全文
2369 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongyuanceshi 2008-11-21
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 Tcs_win 的回复:]
引用楼主 comdoc_wang 的帖子:
例如:
void fun()
{
char* s = (char*)malloc(100);
}

执行完 fun函数后,指针s是否会释放?

操作系统为程序分配空间分栈和堆~~ "定义"局部普通变量和局部指针变量时,只是在栈里分配了块空间,由高地址向低地址扩展,在函数调用结束后自动释放。而定义全局变量,静态变量,指针用malloc或new分配空间是在堆里分配的,除非是程序完全退出才释放,而malloc或new的要想用完就…
[/Quote]

char* s = (char*)malloc(100); //开辟了两个空间,S在栈中,malloc(100)在堆中 ,考虑蛮细致的,学习ing
Tcs_win 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 comdoc_wang 的帖子:]
例如:
void fun()
{
char* s = (char*)malloc(100);
}

执行完 fun函数后,指针s是否会释放?
[/Quote]
操作系统为程序分配空间分栈和堆~~ "定义"局部普通变量和局部指针变量时,只是在栈里分配了块空间,由高地址向低地址扩展,在函数调用结束后自动释放。而定义全局变量,静态变量,指针用malloc或new分配空间是在堆里分配的,除非是程序完全退出才释放,而malloc或new的要想用完就释放的调用free和delete来释放~~~

char* s = (char*)malloc(100); //开辟了两个空间,S在栈中,malloc(100)在堆中
指针s是局部指针变量(在栈中分配),所以执行完 fun函数后S已弹栈(既释放),而堆中申请的malloc(100)没有释放 ,必须由程序员释放, 若程序员不释放(会造成内存泄漏),程序结束时可能由OS回收.
qhplogin 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 comdoc_wang 的帖子:]
例如:
void fun()
{
char* s = (char*)malloc(100);
}

执行完 fun函数后,指针s是否会释放?
[/Quote]
S已经被释放,但内存没有收回。内存泄露!
说白了:就是S这个变量被删除了,不能再使用了,但它申请的那快内存切还是有效的,可以使用。但是拿什么去使用它?(S都没有了)。可以在后面加return s(当然函数的void要改掉,然后用个变量去接受传回来的内存地址!)
oopDesigner 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjl_1026_2001 的回复:]
那如果是整个程序执行结束了呢?
[/Quote]
当然会被回收
lbh2001 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zjl_1026_2001 的回复:]
那如果是整个程序执行结束了呢?
[/Quote]
正常情况下被OS回收了
沙漠里的海豚 2008-11-20
  • 打赏
  • 举报
回复
那如果是整个程序执行结束了呢?
lbh2001 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fetag 的回复:]
不会!动态申请的必须手动释放,否则就是内存泄露了...
[/Quote]
Yes,没什么可说的了
独孤过儿 2008-11-20
  • 打赏
  • 举报
回复
不会!动态申请的必须手动释放,否则就是内存泄露了...

70,014

社区成员

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

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