免费注册 查看新帖 |

Chinaunix

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

脱裤子放屁的代码…… [复制链接]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
41 [报告]
发表于 2007-08-09 21:38 |只看该作者
原帖由 mmmixx 于 2007-8-9 21:21 发表

人家最最最最最最最最崇拜mmmix大哥哥了~~~



BTW,在一贴里面灌两瓢似乎有点过分,打住。

论坛徽章:
0
42 [报告]
发表于 2007-08-09 21:42 |只看该作者
原帖由 MMMIX 于 2007-8-9 21:38 发表



BTW,在一贴里面灌两瓢似乎有点过分,打住。

mmmixx is the 马甲 of flw2?

论坛徽章:
0
43 [报告]
发表于 2007-08-09 21:44 |只看该作者
原帖由 flw 于 2007-8-9 21:31 发表

从英文翻译的?建议给出原文,否则看着忒费劲了。

呵呵,你的英语好像不错。
我试试看

http://www.stuhome.net/plog/inde ... Id=226&blogId=5
为了方便你,直接看这个
In switch statements, be sure every case ends with either a break, continue, return, or /* fall through */ comment. Especially don't forget to put a break on the last case of a switch statement. If you do, I promise someone will forget to add one someday when adding new cases.

[ 本帖最后由 ivhb 于 2007-8-9 22:01 编辑 ]

论坛徽章:
0
44 [报告]
发表于 2007-08-09 21:50 |只看该作者
这个问题是你乱使用
p1 = p2;引起的

跟 p2 = NULL;没有直接的关系

按道理,你也应该把p1 = NULL;也写上
而不是p1和p2都不置NULL

而且问题越早暴露越好

a1析构以后,执行:

*a2->a = 2; //如果析构时已置NULL,那么此时就会报错  
....
a2指向的内存由其他方式改变;
....
错误的读取a2;
....

*a2->a = 3; //如果析构时未置NULL,那么此时才能报错

这两种情况你希望哪一个呢?


原帖由 mmmixx 于 2007-8-9 21:16 发表

你理解错了我的意思,我明白你想让它出错并显露出来。但是,此时,解引用 a2 已属未定义行为,它可显露,也可以不显露,因为是未定义行为,所以它想怎么样都行。
以目前的实现来讲,当你使用 a2 时,原先被释 ...

论坛徽章:
0
45 [报告]
发表于 2007-08-09 21:52 |只看该作者
原帖由 isnowran 于 2007-8-9 21:23 发表

见23楼

23 楼有啥?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
46 [报告]
发表于 2007-08-09 21:54 |只看该作者
原帖由 mynets 于 2007-8-9 21:46 发表
产品级的代码稳定第一,这种写法是很常见的

你的意思是说,所谓稳定性,就是指在防盗门的锁上面再糊一层报纸?
这样你即使是想要撬锁,
那也得先把纸撕掉才行,
也就是说,
糊了报纸的锁的安全性等于=防盗门提供的安全性+一张纸提供的安全性,
很显然糊了报纸的防盗门更安全,
但问题是,有必要这么做麽?

如果程序逻辑要靠 if ( ptr != NULL ) 来保证不释放错野指针,
那这程序得小心自己开锁时别把报纸不小心给捅到锁眼里去——万一什么时候忘了 ptr = NULL 可就惨了。

论坛徽章:
0
47 [报告]
发表于 2007-08-09 21:54 |只看该作者
觉的正确,第二个非常有效,用来定位.第一个效果不是很好,不过也不会坏到脱裤子放屁的程序

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
48 [报告]
发表于 2007-08-09 21:55 |只看该作者
原帖由 ivhb 于 2007-8-9 21:44 发表

呵呵,你的英语好像不错。
我试试看

http://www.stuhome.net/plog/inde ... Id=226&blogId=5
为了方便你,直接看这个

下面这个原文的排版效果好点:

http://www.jetcafe.org/~jim/c-style.html

论坛徽章:
0
49 [报告]
发表于 2007-08-09 21:56 |只看该作者
楼主,你还嫩了点,
第一个问题, 很多时候 变量的状态不是那么容易维护的
第二个问题, assert不是函数

代码不是那么容易的,不要以为看了几本书,就能指点江山了。

论坛徽章:
0
50 [报告]
发表于 2007-08-09 21:59 |只看该作者
原帖由 ypxing 于 2007-8-9 21:50 发表
这个问题是你乱使用
p1 = p2;引起的

跟 p2 = NULL;没有直接的关系

按道理,你也应该把p1 = NULL;也写上
而不是p1和p2都不置NULL

而且问题越早暴露越好

a1析构以后,执行:

*a2->a = 2; //如果析构时已置NULL,那么此时就会报错  
....
a2指向的内存由其他方式改变;
....
错误的读取a2;
....

*a2->a = 3; //如果析构时未置NULL,那么此时才能报错

这两种情况你希望哪一个呢?


汗……你没有明白我的意思……我的表达能力太差吗?大家评评理,看看我的回帖是否表意不清。

原帖由 mmmixx 于 2007-8-9 21:16 发表

你理解错了我的意思,我明白你想让它出错并显露出来。但是,此时,解引用 a2 已属未定义行为,它可显露,也可以不显露,因为是未定义行为,所以它想怎么样都行。
以目前的实现来讲,当你使用 a2 时,如果原先被释放的内存已被重新利用,并且 a 所在的内存被重新赋值为别的非NULL值,此时,就不会死出来!


例如,a1析构以后,假若有 a3 = new A;,并且刚好分配到 a1 原来指向的空间,而且将 a 的值从 NULL 改成了非 NULL,那么

*(a2->a) = 2;

还是没错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP