免费注册 查看新帖 |

Chinaunix

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

一个常见的指针操作错误问题 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2008-09-09 01:30 |只看该作者
已经是哲学问题了  睡觉鸟

论坛徽章:
0
72 [报告]
发表于 2008-09-09 09:29 |只看该作者
讨论真热烈
我想一般做p=NULL操作的都会在后面有出现其他的对p的操作,基本在使用前都会进行if(p!=NULL)的判断,这很正常
而一般如果free后没有什么要做的也就就不用=NULL了。
flw的意思是从逻辑上来避免这种问题,但是谁也不能保证随时都能有这么清晰的头脑,尤其换人维护代码的时候,开发人员的素质都是有区别的。如果后面的使用者不会做if(p!=NULL)的判断,这样=NULL也是没有用的。
所以,这样的操作还是提倡的,至少,它能减少某些问题的发生;至少,它会让素质不同的开发人员维护同一段代码是减少一点错误。而本身=NULL的操作并不会带来多大的开销,也不会带来问题,只会让某些自认为水平很高的人看到这段代码时鄙视一下作者(们)。

以上纯个人观点,欢迎大家鄙视!

论坛徽章:
0
73 [报告]
发表于 2008-09-09 10:08 |只看该作者
Ritchie已经明确在他的书中说了:“使用已经释放的存储空间是错误的”(It is also an error to use something after it has been freed,原书P136)。

那个林博士教导大家“=NULL”是在为错误寻找弥补措施。

以后我会和别人说:free了你就别用,到此为止。别老想着还“=NULL”,就不会有问题了。

论坛徽章:
0
74 [报告]
发表于 2008-09-09 14:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
75 [报告]
发表于 2008-09-09 15:10 |只看该作者
仔细看一下 《c 陷阱与缺陷》
或《c和指针》

论坛徽章:
0
76 [报告]
发表于 2008-09-09 16:26 |只看该作者
原帖由 DraculaW 于 2008-9-8 11:03 发表
VC乱字符因为是Debug 他会把free的空间置为0xcc
如果改为release 就是输出正确
不过 这样做还是错的

我的是Debug能运行,release有错

论坛徽章:
0
77 [报告]
发表于 2008-09-09 19:46 |只看该作者

o ——o

free(str);
str=NULL;//you should add this

gcc跟vc的回收机制不同
gcc free之后可能同时做了str=NULL;
而vc则没有

论坛徽章:
0
78 [报告]
发表于 2008-09-09 23:55 |只看该作者
6楼,你想干嘛呢

论坛徽章:
0
79 [报告]
发表于 2008-09-10 10:16 |只看该作者
cu的flw和smth的flw,
虽是同一个人,
但态度真是判若两人啊~~

论坛徽章:
0
80 [报告]
发表于 2008-09-10 10:26 |只看该作者
原帖由 flw 于 2008-9-5 09:32 发表
小喷油看好了!
叔叔给你作个示范:


to 楼主:指针 free 后不再可用,
是否出错取决于平台(编译器+操作系统)。

我再说一遍:错误的程序并不一定总是能得到错误的结果。


嘻嘻
是叔叔还是阿姨,这是个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP