[問題] HW4 ***glibc detected***

看板EE_DSnP作者 (Technofreak)時間11年前 (2012/11/22 23:29), 編輯推噓8(8014)
留言22則, 5人參與, 最新討論串1/1
我的程式跑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

11/22 23:41, , 1F
建議用一個最小而會造成 crash 的 dofile,跑 debugger慢慢
11/22 23:41, 1F

11/22 23:42, , 2F
trace 你的 code. 應該是不知道在什麼地方你把 memory
11/22 23:42, 2F

11/22 23:43, , 3F
corrupt 掉了... 可能也沒有比用 debugger 更好的辦法...
11/22 23:43, 3F

11/22 23:50, , 4F
可是我do1~3都正確耶??
11/22 23:50, 4F

11/23 00:04, , 5F
可是 do4 會 crash 還是表示你的程式有 bug...
11/23 00:04, 5F

11/23 00:05, , 6F
要相信 crash 事出必有因
11/23 00:05, 6F

11/23 00:06, , 7F
然後想: 還好不是等到助教那邊才被發現 crash...
11/23 00:06, 7F

11/23 00:18, , 8F
面對這種 bug 只能把自己的程式邏輯重想一遍又一遍....
11/23 00:18, 8F

11/23 00:31, , 9F
恩,用 debugger 把變數 print 出來絕對會有幫助的
11/23 00:31, 9F

11/23 00:32, , 10F
另外,這種 memory corruption 通常是某個變數的值在莫名
11/23 00:32, 10F

11/23 00:32, , 11F
奇妙的地方被改掉了。由於變數不在它的 domain 就無法print
11/23 00:32, 11F

11/23 00:33, , 12F
可以把 "絕對記憶體位置" 的內容 display 出來.
11/23 00:33, 12F

11/23 00:34, , 13F
像是 display *((MemTestObj *) 0x7f00b8c) 之類的
11/23 00:34, 13F

11/23 00:38, , 14F
感覺像是double delete的問題 然後回報的位置通常很奇怪
11/23 00:38, 14F

11/23 00:45, , 15F
double delete 應該會說 "doubly freed error..." 之類的
11/23 00:45, 15F

11/24 00:24, , 16F
果然是自己耍蠢了,memblock的getmem應該是先return再
11/24 00:24, 16F

11/24 00:24, , 17F
移動指標,結果果先移動再輸出,難怪會crash....
11/24 00:24, 17F

11/24 00:25, , 18F
謝謝老師和大家
11/24 00:25, 18F

11/24 00:57, , 19F
Great!
11/24 00:57, 19F

11/24 01:45, , 20F
我也跟你有同樣的crash耶,不過我是錯在rn在remainsize
11/24 01:45, 20F

11/24 01:45, , 21F
太小的時候會變成奇怪的值
11/24 01:45, 21F

11/24 11:19, , 22F
樓上會不會是size_t不含負的關係,要不要轉成int試試?
11/24 11:19, 22F
文章代碼(AID): #1GhaJOZs (EE_DSnP)