ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

CÓïÑÔÖÐÊ·ÉÏ×îÓÞ´ÀµÄBug(Ò»)
2014-11-23 23:11:44 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºÑÔÖÐ Ê·ÉÏ×î ÓÞ´À Bug

µ¼¶Á£º±¾ÎÄÀ´×Ô¡¶The most stupid C bug ever¡·ÕâÆªÎÄÕ£¬ÒëÎÄÓÉ¿á¿ÇÍø³Âð©ÕûÀí±àÒë¡¶CÓïÑÔÖÐÊ·ÉÏ×îÓÞ´ÀµÄBug¡·¡£ÄÚÈÝÈçÏ£º

ÎÄÕºÜÓÐÒâ˼£¬·ÖÏí¸ø´ó¼Ò¡£ÎÒÏàÐÅÕâÑùµÄbug£¬¾ÍËãÄãÊǸßÊÖÄãÒ²»á·¸µÄ¡£ÄãÀ´¿´¿´×÷Õß·¸µÄÕâ¸öBug°É¡£¡£

Ê×ÏÈ£¬×÷ÕßÏëÓÃÒ»¶Î³ÌÐòÀ´´´½¨Ò»¸öÎļþ£¬Èç¹ûÓÐÎļþÃûµÄ»°£¬¾Í´´½¨ÕæÕýµÄÎļþ£¬Èç¹ûûÓеϰ£¬¾Íµ÷ÓÃtmpfile()£¿´´½¨ÁÙʱÎļþ¡£ËûÕâ¶Î³ÌÐò¾ÍÊÇHTTPÏÂÔØµÄC³ÌÐò¡£code==200¾ÍÊÇHTTPµÄ·µ»ØÂë¡£

else if (code == 200) { // Downloading whole file
/* Write new file (plus allow reading once we finish) */
g = fname fopen(fname, "w+") : tmpfile();
}
µ«ÊÇÕâ¸ö³ÌÐò£¬Ö»ÄÜÔÚUnix/LinuxϹ¤×÷£¬ÒòΪ Microsoft µÄ tmpfile()µÄʵÏÖ ¾ÓȻѡÔñÁË C:\ ×÷ΪÁÙʱÎļþµÄ´æ·ÅĿ¼£¬Õâ¶ÔÓÚÄÇЩûÓйÜÀíԱȨÏÞµÄÈËÀ´Ëµ¾Í³ö´óÎÊÌâÁË£¬ÔÚWindows 7Ï£¬¾ÍËãÄãÓйÜÀíԱȨÏÞÒ²»áÓÐÎÊÌâ¡£ËùÒÔ£¬ÉÏÃæµÄ³ÌÐòÔÚWindowsƽ̨ÏÂÐèÒªÓò»Í¬µÄ·½Ê½À´´¦Àí£¬²»ÄÜÖ±½ÓʹÓÃWindowsµÄtmpfile()º¯Êý¡£

ÓÚÊÇ×÷Õß¾ÍÏȰÑÕâ¸öÎÊÌâ¼ÇÏÂÀ´£¬ÔÚ×¢ÊÍÖÐдÏÂÁËFIXME£º

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();
}
È»ºó£¬×÷Õß¾õµÃÐèҪдһ¸ö¿çƽ̨µÄ±àÒ룺

FILE * tmpfile ( void ) {
#ifndef _WIN32
return tmpfile();
#else
//code for Windows;
#endif
}
È»ºó£¬×÷Õß¾õµÃÕâÑùʵÏֺܲ»ºÃ£¬»á·¢ÏÖÃû×Ö³åÍ»£¬ÒòΪÕâÑùÒ»À´Õâ¸öº¯ÊýÌ«ÄÑ¿´ÁË¡£ÓÚÊÇËûÖØ¹¹ÁËÒ»ÏÂËûµÄ´úÂ롪¡ªÐ´Ò»¸ö×Ô¼ºÊµÏÖµÄtmpfile() ¨C w32_tmpfile£¬È»ºó£¬ÔÚWindows ÏÂÓú궨ÒåÀ´ÖØÃüÃûÕâ¸öº¯ÊýΪtmpfile()¡££¨³Âð©×¢£ºÕâÖÖÓ÷¨ÊDZȽϱê×¼µÄ¿çƽ̨´úÂëµÄд·¨£©

#ifdef _WIN32
#define tmpfile w32_tmpfile
#endif

FILE * w32_tmpfile ( void ) {
//code for Windows;
}
¸ã¶¨£¡±àÒë³ÌÐò£¬ÔËÐС£¿¿£¡¾ÓȻûÓе÷Óõ½ÎÒµÄw32_tmpfile()£¬Ê²Ã´ÎÊÌ⣿µ÷ÊÔ£¬µ¥²½¸ú×Ù£¬¹ûȻûÓе÷Óõ½£¡ÄѵÀÊÇÎʺűí´ïʽÓÐÎÊÌ⣿¸Ä³Éif ¨C else Óï¾ä£¬ºÃÁË£¡

if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}
Îʺűí´ïʽ²»Ó¦¸ÃÓÐÎÊÌâ°É£¬ÄѵÀÎÒÃǵĺê¶ÔÎʺűí´ïʽ²»Ö±×÷Óã¬ÕâÄѵÀÊDZàÒëÆ÷µÄÔ¤±àÒëµÄÒ»¸ö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();
if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}
}
²»ÄÜÕý³£¹¤×÷µÄ´úÂë

²»Äܹ¤×÷µÄ´úÂë

#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µÄÕæÕýÔ­Òò£¡

¶øÖ®ËùÒԸijÉ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×÷³ýÊý¡£ÓÚÊÇÎҵĴúÂë³ÉÁËÏÂÃæµÄÕâ¸öÑù×Ó£º

float result = num/*pInt;
¡­.

/* some comments */

num++;
ÒòΪÎÒÔÚÎÒµ±Ê±ÓÃvi±àд´úÂ룬ËùÒÔûÓÐÓï·¨¸ßÁÁ£¬¶øÎҵijÌÐò¶¼±àÒëͨ¹ýÁË£¬µ«ÊÇÈ´³öÏÖÁËºÜÆæ¹ÖµÄÊ¡£ÎÒÒ²²»ÖªµÀ£¬ÓÃgdbµ÷ʽµÄʱºò£¬·¢ÏÖÓÐЩÓï¾äÖ±½Ó¾Í¹ýÁË¡£Õâ¸öÎÊÌâÈÃÎÒ»¨Á˺ܶàʱ¼ä£¬×îºó·¢ÏÖÎÊÌâÔ­À´ÊÇûÓпոñµ¼ÖÂ

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 1/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º½âÌâ±Ê¼Ç¨DÊäÈëÒ»¿Å¶þÔª²éÕÒÊ÷£¬½.. ÏÂһƪ£º ´®¿ÚÒ첽ͬ²½Í¨Ñ¶

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: