社区
C语言
帖子详情
关于malloc和free的内存问题
myenthusiasm
2011-05-25 03:29:24
我有个疑问:比如有一个指针point,用malloc 给它分配块内存。然后通过point指针将一串字符串存到该内存中。字符串以'\0'结尾,长度比该块内存小。然后用free(point) 释放内存的时候,是释放了整块内存的吧,用什么记录了这块内存的。我是说,怎么不是释放到'\0'就结束了?
...全文
156
15
打赏
收藏
关于malloc和free的内存问题
我有个疑问:比如有一个指针point,用malloc 给它分配块内存。然后通过point指针将一串字符串存到该内存中。字符串以'\0'结尾,长度比该块内存小。然后用free(point) 释放内存的时候,是释放了整块内存的吧,用什么记录了这块内存的。我是说,怎么不是释放到'\0'就结束了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
myenthusiasm
2012-04-17
打赏
举报
回复
看了这两篇帖子大概明白了:
http://blog.csdn.net/crzy_sparrow/article/details/7439254
赵4老师
2011-05-26
打赏
举报
回复
引用 12 楼 wizard_tiger 的回复:
应用程序调用“操作系统的内存管理模块”提供的malloc函数申请得到的内存,后来调用free函数释放之后,“操作系统的内存管理模块”并没有删除或改变其内容,
而只是记住这片内存以后有谁调用malloc的话可以被再利用了。
wizard_tiger
2011-05-26
打赏
举报
回复
malloc函数申请的内存用free函数释放之后并没有删除其内容,
而只是告诉计算机这片内存可用了。
stein42
2011-05-26
打赏
举报
回复
molloc free都是标准库函数,不同的操作系统是用不同的方法完成的,每次分配都能记住分配了多大空间,所以free就知道释放多大一块空间,而不管这块内存里面的数据。
AnYidan
2011-05-25
打赏
举报
回复
A free block contains a pointer to the next block in the chain, a record of the size of the block, and then the free space itself; the control information at the beginning is called the ``header.''
heap 是循环链表,上述是每个结点的结构,每次分配给你的实际上比你要得多了一块,header
赵4老师
2011-05-25
打赏
举报
回复
操作系统提供的malloc功能,它帮你记住了你申请时填写的字节数,所以你free的时候只需要提供起始地址即可。甚至你进程退出时,操作系统还会自动释放你进程中所有malloc的内存,因为它也记住了你这个进程每次调用malloc申请时返回的起始地址。
nightkids_008
2011-05-25
打赏
举报
回复
malloc是生成的一个管理内存的结构,4个成员,具体记不清了 好像一个是 上次申请内存的地址,这次申请的地址,第三个忘了,第四个是大小。
酒红色的泪
2011-05-25
打赏
举报
回复
malloc分配内存的时候,内核会记录你分配了的内存大小,至于你里面要存什么样的数据,内核无需关心,因此不可能只释放到'\0'结束,而是会对整块申请的内存空间删除使用标记。
fragileeye
2011-05-25
打赏
举报
回复
malloc在分配内存时就有这块内存地址有记录。。
mrkang007
2011-05-25
打赏
举报
回复
可能是一种约定吧,不清楚帮顶。。。
ljt3969636
2011-05-25
打赏
举报
回复
呵呵,按照你想法我要申请int[n]把整形复制进去连'\0'都没有,怎么释放?
堆管理器负责申请堆空间,如果是堆链表(一种形式),会有一个结构,里面有指针指向申请的内存(看成一个节点),还有一个值用来记录申请的大小~
www_adintr_com
2011-05-25
打赏
举报
回复
系统的内存管理会记录你分配内存时的信息的,通常会记录在返回给你的指针地址前面一点的位置.
bdmh
2011-05-25
打赏
举报
回复
释放全部
zhuywei123
2011-05-25
打赏
举报
回复
free释放内存并没有删除内存内容,其实是断开了指针和内存的指向关系,所以free之后指针应置NULL。
千杯不醉-sen
2011-05-25
打赏
举报
回复
他有自己的大小的,申请多少就会释放多少。
C++
malloc
和
free
free
释放
内存
的和delete可以说是两套代码 用new申请的就要用delete释放,用
malloc
申请的就要用
free
释放。 但是
malloc
和
free
是函数,而new 和 delete 是运算符。除此之外,new 在申请
内存
的同时,还会调用对象的...
Linux下
malloc
/
free
内存
碎片
问题
通过对
malloc
,
free
源码的分析,发现在堆上分配
内存
,很容易造成
内存
碎片。
内存
碎片在这里可以从两个方面进行分析,物理地址的
内存
碎片和线性地址(虚拟地址)的
内存
碎片。 首先是物理地址的
内存
碎片,
malloc
_
free
_...
C++
malloc
/
free
/new/delete详解(
内存
管理)
这里写目录标题
malloc
/
free
典型用法
内存
分配实现过程new/delete典型用法
内存
分配实现过程new/delete和
malloc
/
free
的区别
malloc
/
free
典型用法
malloc
()负责动态配置
内存
,大小由size决定,返回值成功时为任意类型...
简单分析
malloc
和
free
源码实现
在编码过程中,我们往往只关心如何使用系统提供的API,比较容易...不要跨模块
malloc
和
free
内存
野指针
问题
而今天就来说说glibc
内存
malloc
和
free
的源码探究以及说明下为什么
free
指针时,不需要指定
内存
块大小。 ...
malloc
/
free
内存
碎片的产生原因
malloc
和
free
大量使用后回造成
内存
碎片,那么这种碎片形成的机理是什么?如果机理是申请的
内存
空间大小(太小)所形成的,那么申请多大的区域能够最大限度的避免
内存
碎片呢(这里的避免不是绝对的避免,只是一种概率)? ...
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章