c语言程序崩溃如何找bug,C语言中史上最愚蠢的Bug

不能正常工作的代码

不能工作的代码

#ifdef _WIN32

#  define tmpfile w32_tmpfile

#endif

FILE * w32_tmpfile ( void ) {

code for Windows;

}

else if (code== 200) {     // Downloading whole file

/* Write new file (plus allow reading once we finish) */

// FIXME Win32 native version fails here because

//    Microsoft's version of tmpfile() creates the file in C:\

g=fname? fopen(fname, "w+") : tmpfile();

}

也许你在一开始就看到了这个bug,但是作者没有。所有的问题都出在注释上:

/* Write new file (plus allow reading once we finish) */

// FIXME Win32 native version fails here because

//     Microsoft's version of tmpfile() creates the file in C:\

你看到了最后那个C:\吗?在C中,“\” 代表此行没有结束,于是,后面的代码也成了注释。这就是这个bug的真正原因!

而之所以改成if-else能工作的原因是因为作者注释了老的问号表达式的代码,所以,那段能工作的代码成了:

/* Write new file (plus allow reading once we finish) */

// FIXME Win32 native version fails here because Microsoft's version of tmpfile() creates the file in C:

//g=fname? fopen(fname, "w+") : tmpfile();

if(NULL != fname) {

g=fopen(fname, "w+");

} else {

g=tmpfile();

}

我相信,当作者找到这个问题的原因后,一定会骂一句“妈的”!我也相信,这个bug花费了作者很多时间!

最后,我也share一个我以前犯的一个错。

我有一个小函数,需要传入一个int* pInt的类型,然后我需要在我的代码里 把这个int* pInt作除数。于是我的代码成了下面的这个样子:

floatresult=num/*pInt;

….

/*  some comments */

num++;

因为我在我当时用vi编写代码,所以没有语法高亮,而我的程序都编译通过了,但是却出现了很奇怪的事。我也不知道,用gdb调式的时候,发现有些语句直接就过了。这个问题让我花了很多时间,最后发现问题原来是没有空格导致的,TNND,下面我用代码高亮的插件来显示上面的代码,

floatresult=num/*pInt;

....

/*  some comments */

num++;

我的代码成了:

floatresult=num-x<10? f(result):f(-result);

我的这个错误在愚蠢程度上和上面那个作者出的错误有一拼。

22/2<12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值