绝不能对非动态分配存储块使用free,也不能对同一块内存区同时用free释放两次,为什么?free函数原理是?

 我来答
乱舞大螃蟹
推荐于2017-11-25 · TA获得超过188个赞
知道答主
回答量:205
采纳率:0%
帮助的人:109万
展开全部
动态内存也就是堆区,非动态内存也就是栈区

栈是系统管理的,当然不能free

你申请内存时,实际上系统是把一块标记为未使用的内存地址返回给你,然后把那个地址标记为已使用。

你释放的时候,实际上就是把那块内存标记为未使用。

你要对一个已经标记为未使用的内存再标记成未使用,当然就不可以了!
百度网友fda723c
2013-04-02 · 超过15用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:41.6万
展开全部
操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的malloc申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

free:释放ptr指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用malloc、realloc以及realloc函数来再分配。
free两次不一定出问题,看人品。最好不要free两次
追问
free两次不一定出问题,我也觉得这样!那是教材上说的了,我觉得应该说是“不能对同一块已分配的内存区连续free一次以上”。看来free的原理就像你说的那样,如果那样,那么对同一块已分配的内存区连续free一次以上可能产生的最严重的后会是什么呢?操作系统会终止程序往下运行?还是操作系统会崩溃,然后死机?你觉得呢?
追答
结果未定义,要看内存的实际情况了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐霄沛
2013-04-02 · 超过24用户采纳过TA的回答
知道答主
回答量:315
采纳率:100%
帮助的人:120万
展开全部
free是释放程序开发人员,开辟的内存。操作系统为程序分配的内存,由操作系统管理,开发者不应处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式