作者fatandy567 (Technofreak)
看板EE_DSnP
標題[問題] HW4 ***glibc detected***
時間Thu Nov 22 23:29:25 2012
我的程式跑do4 的測資,跑到"mtn 1 -a 0"這行,程式會在 MTNew 指令中的
if(CmdExec::lexOptions(option,options)==false) crash
錯誤訊息是:
***glibc detected*** malloc() memory corruption ......
然號跑出trace back之類的一大多位址
這是什麼問題??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.217.12
1F:推 ric2k1:建議用一個最小而會造成 crash 的 dofile,跑 debugger慢慢 11/22 23:41
2F:→ ric2k1:trace 你的 code. 應該是不知道在什麼地方你把 memory 11/22 23:42
3F:→ ric2k1:corrupt 掉了... 可能也沒有比用 debugger 更好的辦法... 11/22 23:43
4F:→ fatandy567:可是我do1~3都正確耶?? 11/22 23:50
5F:推 ric2k1:可是 do4 會 crash 還是表示你的程式有 bug... 11/23 00:04
6F:→ ric2k1:要相信 crash 事出必有因 11/23 00:05
7F:→ ric2k1:然後想: 還好不是等到助教那邊才被發現 crash... 11/23 00:06
8F:推 ypf791:面對這種 bug 只能把自己的程式邏輯重想一遍又一遍.... 11/23 00:18
9F:推 ric2k1:恩,用 debugger 把變數 print 出來絕對會有幫助的 11/23 00:31
10F:→ ric2k1:另外,這種 memory corruption 通常是某個變數的值在莫名 11/23 00:32
11F:→ ric2k1:奇妙的地方被改掉了。由於變數不在它的 domain 就無法print 11/23 00:32
12F:→ ric2k1:可以把 "絕對記憶體位置" 的內容 display 出來. 11/23 00:33
13F:→ ric2k1:像是 display *((MemTestObj *) 0x7f00b8c) 之類的 11/23 00:34
14F:推 gamerred:感覺像是double delete的問題 然後回報的位置通常很奇怪 11/23 00:38
15F:推 ric2k1:double delete 應該會說 "doubly freed error..." 之類的 11/23 00:45
16F:→ fatandy567:果然是自己耍蠢了,memblock的getmem應該是先return再 11/24 00:24
17F:→ fatandy567:移動指標,結果果先移動再輸出,難怪會crash.... 11/24 00:24
18F:→ fatandy567:謝謝老師和大家 11/24 00:25
19F:推 ric2k1:Great! 11/24 00:57
20F:推 stanleysu:我也跟你有同樣的crash耶,不過我是錯在rn在remainsize 11/24 01:45
21F:→ stanleysu:太小的時候會變成奇怪的值 11/24 01:45
22F:→ fatandy567:樓上會不會是size_t不含負的關係,要不要轉成int試試? 11/24 11:19