免费注册 查看新帖 |

Chinaunix

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

这个程序为什么是对的? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-11-13 21:11 |只看该作者
原帖由 SANFXUNIL 于 2005-11-13 21:02 发表


我的意思是,既然已经free了,那么那片区域就不应该还能"合法"的访问,虽然指针仍然是指向那里.


free在内部实现似乎只是把对应的空间长度标识为0,不清除指针变量的值

论坛徽章:
0
12 [报告]
发表于 2005-11-13 22:14 |只看该作者
当然是不合法的
但是不代表不合法的事就不能干啊


原帖由 SANFXUNIL 于 2005-11-13 21:02 发表


我的意思是,既然已经free了,那么那片区域就不应该还能"合法"的访问,虽然指针仍然是指向那里.

论坛徽章:
0
13 [报告]
发表于 2005-11-13 22:45 |只看该作者
我的意思是,既然已经free了,那么那片区域就不应该还能"合法"的访问,虽然指针仍然是指向那里.



系统是不做这个合法性检查的;就象是定义一个长度为3的字符数组你却还可以在第四个位置上改变它的值一样.

论坛徽章:
0
14 [报告]
发表于 2005-11-13 22:53 |只看该作者
原帖由 hotness28 于 2005-11-13 22:45 发表

系统是不做这个合法性检查的;就象是定义一个长度为3的字符数组你却还可以在第四个位置上改变它的值一样.


free的时候,不清除指针的值吧。是不是只给系统标注一下这段内存可以重新分配了吧。

论坛徽章:
0
15 [报告]
发表于 2005-11-13 23:47 |只看该作者
原帖由 SANFXUNIL 于 2005-11-13 14:52 发表

    按照我以前的理解,free str指向的区域后,str应该是 ...


理解错误

free只是把指针所指的内存给释放掉,但并没有把指针本身干掉。指针被free以后其地址仍然不变(非NULL),只是该地址对应的内存是垃圾,p成了"野指针"。如果此时不把p设置为NULL,会让人误以为p是个合法的指针。
如果程序比较长,我们有时记不住p所指的内存是否已经被释放,在继续使用p之前,通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。
      用malloc申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。

      动态内存的申请与释放必须配对,防止内存泄漏。

      用free释放了内存之后,立即将指针设置为NULL,防止产生"野指针"。

[ 本帖最后由 zh_manyu 于 2005-11-13 23:52 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2005-11-14 00:11 |只看该作者
偶的感觉好像是
free之后, 指针指向的内容变为0.
指针本身拥有原值...

另外似乎在哪看到过...
说是程序不会因为free而把内存还给操作系统, 程序依然保留这块内存, 这样使得下次分配的时候可以再度施用...
可能和这有关.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP