免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: SONGGHOST
打印 上一主题 下一主题

[C] 关于malloc的 疑问 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-03-04 15:40 |只看该作者
不一定出错,但这样的操作结果是未定义的,即怎样都是可能的

论坛徽章:
0
12 [报告]
发表于 2011-03-04 21:38 |只看该作者
本帖最后由 SONGGHOST 于 2011-03-04 21:39 编辑

谢谢各位的解答 , 今天看了写资料!大体上 了解了 malloc和 free的工作机制了,在这里说一下,各位看看对不对!
在这里打个比方:
比方说 申请的这块内存 当成是一个教室,教室里的桌椅。电脑等 相当于内存中的数据;
1,malloc时,相当于 老师说:以后这个教室归你们用了啊,你们可以往教室里边放桌子椅子 和电脑,然后你们的听课证上写上教室门牌号。以后你们就在这里上课!
2. free时 。 相当于 老师又说: 今天你们毕业了,教室还给学校。你们不再有使用权,但是里边的桌子椅子电脑你们不能拿走。归学校处理。以后不许再来这个教室了!
但是学生们就想了,你说不让来就不来啊,我听课证上 有你的 地址,只要教室没别人用,偷着来玩一会能怎么着,运气好的话 电脑没被搬走,还能上会网呢!  但是也有听话的学生。人家直接就吧听课证扔了,以后再也不来了!

论坛徽章:
0
13 [报告]
发表于 2011-03-04 22:36 |只看该作者
slab算法回收内存是不会清除内存的数据的,只要没有进程使用这块内存,应该是可以访问的~

论坛徽章:
0
14 [报告]
发表于 2011-03-05 00:13 |只看该作者
free(newnode);之后newnode已成野指针了,newnode指向哪里已变成不固定了。这样的代码很危险,下次再用newnode指针就不知道会指向哪里,因此在free(newnode);之后要加长newnode = NULL;把newnode固定在0地址去。

论坛徽章:
1
天蝎座
日期:2014-02-28 16:08:53
15 [报告]
发表于 2011-03-05 01:39 |只看该作者
free只是对那块内存标记为未使用

论坛徽章:
0
16 [报告]
发表于 2011-03-05 08:23 |只看该作者
回复 14# myqthj


    又有点不明白了,假设newnode 指向的地址是0x1000  那么 free(newnode);   newnode的地址是不是应该还是0x1000  只是这块内存的使用权不确定而已!如果系统没有把这块内存分配给其他的进程使用,我们通过newnode 应该还是可以访问这块内存的是吗?

或者另一种解释是,我们申请的内存实际是虚拟内存空间,即0-4g中的一部分(堆);而malloc时,内核将虚拟内存映射到物理内存;free时 取消映射;如果再次访问,虚拟地址是没有变的,但是物理内存可能映射给了其他的进程,所以不一定能访问!为了防止产生BUG,所以手动讲NEWNODE 指向NULL

论坛徽章:
0
17 [报告]
发表于 2011-03-05 14:51 |只看该作者
出不出错看人品,但这样做肯定是错误的

如果LZ星期天把1000块钱扔公司里 星期一早上去找些许还能够找到,如果是周一早上丢的 中午去找都有可能找不到了 {:3_204:}

论坛徽章:
0
18 [报告]
发表于 2011-03-05 16:45 |只看该作者
本帖最后由 SONGGHOST 于 2011-03-05 16:46 编辑

{:3_200:} 谢谢大家的 解答! 我已经明白了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP