社区
C语言
帖子详情
函数体内动态分配的内存,在函数执行完后是否会释放?
comdoc_wang
2008-11-20 03:34:49
例如:
void fun()
{
char* s = (char*)malloc(100);
}
执行完 fun函数后,指针s是否会释放?
...全文
2369
8
打赏
收藏
函数体内动态分配的内存,在函数执行完后是否会释放?
例如: void fun() { char* s = (char*)malloc(100); } 执行完 fun函数后,指针s是否会释放?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
不会!动态申请的必须手动释放,否则就是内存泄露了...
最全的C和C++语言笔试面试题汇总
最全的C和C++语言笔试面试题汇总,我大四时候找工作时候他帮上了很多忙,里面的题目经常考到。希望对大家有帮助。
C++动态
内存
会
被自动
释放
吗?
C++动态
内存
会
被自动
释放
吗?
函数
体内
的局部变量在
函数
结束时自动消亡。很多人误以为示例7-6是正确的。理由是p是局部的指针变量,它消亡的时候
会
让它所指的动态
内存
一起完蛋。这是错觉! void Func(void) { char *p = (char *) malloc(100); // 动态
内存
会
自动
释放
吗? } ...
函数
内部new申请的
内存
需要手动
释放
内存
泄漏是指程序在运行过程中不断分配
内存
而不
释放
,最终导致系统的可用
内存
不断减少,直至耗尽。
函数
结束时,
函数
内部的局部变量
会
被销毁,但如果这些局部变量指向
动态分配
的
内存
,并没有被
释放
,那么
内存
就
会
泄漏。在实际应用中,如果
内存
泄漏问题严重,可能
会
导致程序运行速度变慢,资源消耗增加,甚至使得系统无法正常工作。C++中的
内存
管理是由程序员负责的,如果在
函数
内部使用。分配的
内存
,也需要在适当的时候手动
释放
,否则就
会
导致
内存
泄漏问题。这个不是在
函数
内部new的吗,
函数
结束后不
会
自动
释放
吗。
C语言动态
内存
会
被有动
释放
吗?
C语言动态
内存
会
被有动
释放
吗?
十六.递归
函数
一. 什么是递归
函数
·如果在一个
函数
的
函数
体内
调用了该
函数
本身,这个
函数
就成为递归
函数
二.递归
函数
的组成部分 ·递归调用与递归终止条件 三.递归的调用过程 ·每递归调用一次
函数
,都
会
在栈
内存
分配一个栈帧 ·每
执行
完一次
函数
,都
会
释放
相应的空间 四.递归的优缺点 ·缺点:占用
内存
多,效率低下 ·优点:思路和代码简单 ...
C语言
70,014
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章