免费注册 查看新帖 |

Chinaunix

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

为什么free或者delete的时候不直接将指针置成NULL? [复制链接]

论坛徽章:
0
51 [报告]
发表于 2009-11-26 19:05 |只看该作者
原帖由 langue 于 2009-11-26 17:43 发表


大神啊,求您了,用 C# 或者 Java 或者脚本语言吧……

呵呵,我只是说说自己的想法而已嘛

论坛徽章:
0
52 [报告]
发表于 2009-11-26 19:11 |只看该作者
原帖由 shan_ghost 于 2009-11-26 18:10 发表


因为strcpy可能写越界,而strncpy不会。

另外,strncpy要同时检查\0和已拷贝字符数两个条件,而strcpy只需要检查\0即可——注意这个检查是每拷贝一个字符都要进行的——所以大量拷贝数据时strcpy更快一些 ...

虽然完整,但比较松散,也不好用。可以弄的更紧致点。对吧?

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
53 [报告]
发表于 2009-11-27 01:28 |只看该作者
楼主其实需要的不是修改free函数的实现,而是在您的特定的工程里,可以检查出是否所有所有free后面都有置null。
那么可以用一个perl脚本做全局检查,编译前扫描一遍(所谓的代码走查)。

要不要修改free是一个哲学问题(这里不可能讨论出结果),而lz需要解决的其实只是一个工程问题,两者不矛盾。

论坛徽章:
0
54 [报告]
发表于 2009-11-27 09:10 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
55 [报告]
发表于 2009-11-27 09:49 |只看该作者
呢滴神啊,lz要不自己实现一套逻辑引用系统吧

论坛徽章:
0
56 [报告]
发表于 2009-11-27 10:50 |只看该作者
free以后设置指针为NULL,对于操作系统这类软件来说,是浪费CPU资源。因为只有在接下来要判断该指针是否为NULL时,这个设置才有必要。

在很多情况下,程序员,特别是优秀的程序员心里非常清楚该指针是否有效。

而且由于c语言中强大的宏功能,把指针设置为空非常简单。如果在函数中设置为空了,很多时候CPU资源是白白浪费了。这对系统级程序是不可忍受的。

论坛徽章:
0
57 [报告]
发表于 2009-11-27 10:58 |只看该作者
原帖由 ttcn_cu 于 2009-11-27 01:28 发表
楼主其实需要的不是修改free函数的实现,而是在您的特定的工程里,可以检查出是否所有所有free后面都有置null。
那么可以用一个perl脚本做全局检查,编译前扫描一遍(所谓的代码走查)。

要不要修改free是一 ...

这种代码走查的方式不太靠得住吧?因为指针可以赋来赋去。

论坛徽章:
0
58 [报告]
发表于 2009-11-27 10:59 |只看该作者
原帖由 sinall 于 2009-11-27 09:10 发表
楼主,想必经济学十大原理可以回答您的问题。
“人们面临权衡取舍”
关于作出决策的第一课可以归纳为一句谚语:“天下没有白吃的午餐。”为了得到我们喜爱的一件东西,通常就不得不放弃另一件我们喜爱的东西。作出决策要求我们在一个目标与另一个目标之间有所取舍。

也可以从哲学的角度看看这个问题。
“矛盾时时处处存在”
矛盾中的双方,对立、斗争、作用、转换。
这就是为什么后来的Java、C#之类的语言解决了你的问题。

是的,经济学和哲学感觉是万金油啊。呵呵

论坛徽章:
1
双子座
日期:2014-08-29 17:15:03
59 [报告]
发表于 2009-11-27 11:01 |只看该作者
KISS

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
60 [报告]
发表于 2009-11-27 11:32 |只看该作者

回复 #57 slow_hand 的帖子

恩,我先承认我不是一个C程序员,所有我未必能很深刻的理解为什么要把指针赋来赋去,如果工程里到处都这样的话,可读性和可维护性就要让人头疼,此外Coder肆意妄为的乱用指针的话,Architect 允不允许又是另外一回事情了.

要做大一个工程,要考虑的地方方面面有很多,有许多简历工程的规则大家一定得follow,而不应该从改变语言来出发,毕竟如你所说,即便你改了free后面的指针,如何保证其他reference的指针也被修改了,潜伏的的问题还存在.要解决你的问题,有两个方向,1 保留c,但你要处处小心,不应该乱用指针,保证每个指针都是有明确的目的,明确的生存周期,经得起architect的考验.2 换用c#之类, 因为C#的作者不仅仅考虑到了free后的指针处理,更从语言层面上解决其他指针隐患.
这两种语言都是非常优秀的

btw,应该感谢生产力的发展,感谢摩尔定律,cpu的飞速发展让非c语言的效率急速提升,使得你有选择其他语言的空间

[ 本帖最后由 ttcn_cu 于 2009-11-27 11:36 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP