C语言中使用malloc分配内存后没有回收,有办法解决么?

我已经创建了几次,怎么弄要?没用free释放过... 我已经创建了几次,怎么弄要?
没用free释放过
展开
 我来答
匿名用户
推荐于2016-09-28
展开全部
7.5 free 和 delete 把指针怎么啦?
别看 free 和 delete 的名字恶狠狠的(尤其是 delete) ,它们只是把指针所指的内存给
释放掉,但并没有把指针本身干掉。
用调试器跟踪示例 7-5,发现指针 p 被 free 以后其地址仍然不变(非 NULL) ,只是
该地址对应的内存是垃圾,p 成了“野指针” 。如果此时不把 p 设置为 NULL,会让人误
以为 p 是个合法的指针。
如果程序比较长,我们有时记不住 p 所指的内存是否已经被释放,在继续使用 p 之
前,通常会用语句 if (p != NULL)进行防错处理。很遗憾,此时 if 语句起不到防错作用,
因为即便 p 不是 NULL 指针,它也不指向合法的内存块。

char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是 p 所指的地址仍然不变

if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}
示例 7-5 p 成为野指针

7.6 动态内存会被自动释放吗?
7.7 杜绝“野指针”
7.8 有了 malloc/free 为什么还要 new/delete ?
7.9 内存耗尽怎么办?

7.10 malloc/free 的使用要点

7.11 new/delete 的使用要点
7.12 一些心得体会

参考文献:

高质量 C++/C 编程指南 - 林锐 2001
记住一座城
2012-10-25 · TA获得超过728个赞
知道小有建树答主
回答量:1091
采纳率:33%
帮助的人:667万
展开全部
养成好习惯,在堆上分配的内存不用的时候要记得释放,不然它们占据的空间会越来越大,
另外,保存好指针的值,否则可能永远都释放不了了。
当你用free释放一片内存之后,操作系统可能不会真正的收回,当你下一次用malloc分配内存的时候如果大小刚好,它会把你刚释放掉的内存分配给你。
当程序结束后,操作系统会回收所有程序所占用的内存空间,包括堆,数据段,代码段等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuhaifei12
推荐于2017-09-27 · TA获得超过664个赞
知道小有建树答主
回答量:120
采纳率:0%
帮助的人:141万
展开全部
malloc()分配后,当不再用到的时候记得用free()去释放内存,否则会一直占用内存,导致内存泄露,最后内存越来越少。重启机器后内存会释放。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3038d88
2012-10-25 · TA获得超过1097个赞
知道小有建树答主
回答量:1670
采纳率:0%
帮助的人:1169万
展开全部
程序结束 自己没. 用不着怕
除非你一直开着那个申请内存的程序.
不然等你关了程序, 系统会自动回收他所申请的资源
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mxd49532
2012-10-25 · 超过20用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:63.2万
展开全部
不用管 程序运行结束,操作系统会自动回收提供给该程序的资源,
但是有些程序可能会一直运行下去,因此要求不要忘记用free释放内存
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式