免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
61 [报告]
发表于 2007-08-09 22:32 |只看该作者
原帖由 flw 于 2007-8-9 21:37 发表
下面举个程序异常简单且很不乱的例子, 说明判断是否为空的重要性:

int func1()
{
    char* ptr=new char[102400000];
    if (ptr==NULL)
    {
       ......//....在这里进行系统内存不足时的应急处 ...

这样子?
if ( ptr != NULL ){
    free( ptr );
}
只有一种情况下有用,那就是和 goto 配合使用时!
而 goto 恰恰是不推荐大量使用的。
少量情况下 break 也会有类似的情形,
因此我前面才加了“大多数情况下”这样的限定语。


同感,在我看v7的代码时候,就发现即便是goto的情况,仍然不这么使用。代价是很多编译器会给警告。比如
  return (0);
ERROR0:
   return (-1);
ERROR1:
    free (ptr);
    return (-1);
。但是我看着警告还是不爽,另外,使用一堆标号,看着乱。还是喜欢用一个标号。实际上,我也发现,为了避免警告。
在一个goto标号里面写了太多的条件测试,并不影响多少可读性。

这个例子,我觉得最实用的就是在已经知道程序有泄漏。但是不知道问题在什么地方的情况下。在每个函数的出口加上这么一个带free的判断。应该可以让你在不必太关心程序逻辑的情况下,以较小的代价换来成功。
paradise 该用户已被删除
62 [报告]
发表于 2007-08-09 22:37 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

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

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




站在flw的技能高度可能这个NULL的判断是多余的.
但是,我觉得这个判断还是有必要的.

在大多数情况下,好的程序员是不需要这个NULL的判断来保证不会释放野指针的.
但是,人总是会犯错的,更重要的是在程序中,可能还有某个细节没有考虑到从而导致野指针的产生.
这样,加上NULL的判断是就是说当即使自身的逻辑出错了,程序依然不会core dump.
所以,这样总是对自身的作品负责的表现,我认为.
if(p != NULL)
{
   free(p);
   p = NULL;
}

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

论坛徽章:
0
64 [报告]
发表于 2007-08-09 22:41 |只看该作者
谁告诉你这个地方设了NULL,别人就会放松警惕了?

别人这地方注意了,其他地方还会注意.

你这个地方不注意,别的地方可能还是会不注意

你这种"这个地方不用管了,反正别的地方也会犯错误"的心态最不好

原帖由 mmmixx 于 2007-8-9 22:26 发表
明白了吧?我是说,你不能排除我所说的情况的存在吧!别以为设置为 null 就可万事大吉,放松警惕!这反而会造成更多的 bug。


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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
65 [报告]
发表于 2007-08-09 22:42 |只看该作者
原帖由 yulc 于 2007-8-9 22:38 发表

这样,加上NULL的判断是就是说当即使自身的逻辑出错了,程序依然不会core dump.

一个已经出错了的程序,如果还不去死掉那简直太危险了。
更重要的是,这种错误是程序设计上的错误,而不是运行时设备的错误。

论坛徽章:
0
66 [报告]
发表于 2007-08-09 22:43 |只看该作者
这种问题有什么好争的
放屁时想脱裤子的就脱,不想脱裤子的就别脱
脱或者不脱能影响放屁吗

论坛徽章:
0
67 [报告]
发表于 2007-08-09 22:44 |只看该作者
原帖由 xujg 于 2007-8-9 22:43 发表
这种问题有什么好争的
放屁时想脱裤子的就脱,不想脱裤子的就别脱
脱或者不脱能影响放屁吗

有道理=_=|||

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
68 [报告]
发表于 2007-08-09 22:45 |只看该作者
原帖由 xujg 于 2007-8-9 22:43 发表
这种问题有什么好争的
放屁时想脱裤子的就脱,不想脱裤子的就别脱
脱或者不脱能影响放屁吗

你说的很对,
但如果写到编程规范里就不好了,
比如“凡我司职员放屁前必先脱裤”

论坛徽章:
0
69 [报告]
发表于 2007-08-09 22:47 |只看该作者
怎么着舒服,只有自己才知道

原帖由 xujg 于 2007-8-9 22:43 发表
这种问题有什么好争的
放屁时想脱裤子的就脱,不想脱裤子的就别脱
脱或者不脱能影响放屁吗

论坛徽章:
0
70 [报告]
发表于 2007-08-09 22:47 |只看该作者
MODULE_EXPORT void
svga_close (Driver *drvthis)
{
        PrivateData *p = drvthis->private_data;

        debug(RPT_DEBUG, "%s(%p)", __FUNCTION__, drvthis);

        if (p != NULL) {
                if (p->font != NULL)
                        free(p->font);
                p->font = NULL;

                free(p);
        }       
        drvthis->store_private_ptr(drvthis, NULL);

        vga_setmode(TEXT);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP