Re: [心得] Bug of intel Compiler

看板C_and_CPP作者 (苦力)時間15年前 (2010/03/19 09:54), 編輯推噓3(3010)
留言13則, 3人參與, 最新討論串2/3 (看更多)
main.cpp for( int i = 0; i < 2; i++ ) for( int j = 0; j < 4; j++ ) { patch->ptr[i][j] = (patch_t*) calloc( 1, sizeof(patch_t) ); memset(pathc->ptr[i][j],0,sizeof(patch_t)); //<--清除 } 你可以先試試看,我沒有intel 的compiler. 就我的觀點來看,只要跟系統 要記憶體空間,我的做法就是先全部清掉,以免會有dirty data在裡面 ※ 引述《justdemon (人生的轉捩點)》之銘言: : 抓一個Bug抓了兩個多禮拜 : 終於可以確定是 intel Compiler的錯了... : 不知道有沒有板友能幫忙測試一下 或是回報給intel : 因為我用的是 intel提供的非商業軟體 沒有intel的支援 : 經過漫長的Debug 總算把bug濃縮在短短的一百行內 應該很容易看懂 : 希望熱情的板友不要直接 End 跳過 XD : GAMER.h http://nopaste.csie.org/bb285 : Main.cpp http://nopaste.csie.org/0c56c : Refine.cpp http://nopaste.csie.org/33b85 : command : icpc Main.cpp Refine.cpp && ./a.out : OS : CentOS 5.4 with kernel 2.6.18-164.11.1.el5 : 這個code輸出的結果應該是 : 1 : 1 : 0 : 0 : 不過 intel compiler 給的卻是 : 0 : 0 : 1 : 0 : 我也試著找我有沒有做什麼 未定義的事情 不過似乎沒有 : 所以應該可以確認是 compiler 出了錯 : 最後再次感謝板友們的幫忙 ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.75.230.80

03/19 10:11, , 1F
calloc應該要init alloc來的空間為0, 如果問題真的在這
03/19 10:11, 1F

03/19 10:11, , 2F
裡, 那的確是Intel的Compiler或提供的Lib有問題@_@"
03/19 10:11, 2F

03/19 10:14, , 3F
man calloc裡說 calloc是會歸零的啊 應該不需要memset
03/19 10:14, 3F

03/19 10:15, , 4F
不過原po可以試試, 如果就有效了, 就真的是bug了吧XD
03/19 10:15, 4F

03/19 10:16, , 5F
不過這裡不管歸不歸零 至少前面兩個要是 1 啊
03/19 10:16, 5F

03/19 10:17, , 6F
程式後面有填值進去 前面不管是什麼東西 都會變成1吧
03/19 10:17, 6F

03/19 10:18, , 7F
另外 這個bug很容易不見 隨隨便便改個無關緊要的東西
03/19 10:18, 7F

03/19 10:18, , 8F
都有可能會變回 1 1 0 0 像是加個 cout在Refine裡
03/19 10:18, 8F

03/19 10:19, , 9F
你是是看把 int 宣告從 for () 拿出來看看
03/19 10:19, 9F

03/19 10:19, , 10F
你試試看把 int 宣告從 for () 拿出來看看
03/19 10:19, 10F

03/19 10:19, , 11F
或是把 patch_t 裡面的 corner 拿掉 bug就消失了
03/19 10:19, 11F

03/19 10:20, , 12F
visor大說的也是一種方法 不過即使是用了其他方法讓bug
03/19 10:20, 12F

03/19 10:21, , 13F
不發生 可是它的確還是存在 是個不確定因子啊
03/19 10:21, 13F
文章代碼(AID): #1Bejb87X (C_and_CPP)
文章代碼(AID): #1Bejb87X (C_and_CPP)