看板 C_and_CPP 關於我們 聯絡資訊
http://dl.dropbox.com/u/15611020/GG.png
這是我一個朋友他跑程式 會出現這error 他沒頭沒尾的問我... 我是很想幫她 但我怎麼想都不知道 alloc heap怎樣會出現exception 他號稱他記憶體根本不吃 一定不會超過2GB 所以我完全不知道該怎麼給他線索要他去trace... 請教各位這種 中文翻英文應該是heap corruption吧? 但heap corruption應該比較會發生在debug mode的 delete 吧? 實在沒頭緒 請各位給點線索 ps. 這應該是exception吧? 我用try {} catch(bad_alloc抓的到嗎) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.192.138.160
purpose:heap corruption 應該是程式有 Bug,寫入到資料時誤寫到 05/23 00:50
purpose:像 metadata 這類區域,這跟記憶體不足沒有關係 05/23 00:50
purpose:緩衝區溢位是一種可能,寫入的資料超過 malloc 配置的容量 05/23 00:58
purpose:當下溢發生時,電腦無法察覺所以你沒機會 catch exception 05/23 00:59
purpose:可能性很多,只能自己 google 查 heap corruption how to 05/23 01:00
QQ29:想問下,當下無法察覺那為啥delete時才會爆炸 05/23 01:20
QQ29:之前發文,觀念是os 會回收你alloc的那區塊,但寫超過觸法exc 05/23 01:24
QQ29:eption 倒是很難理解,還是debug版有做手腳 05/23 01:25
purpose:delete 時要讀取 metadata 才發現損壞,但何時、何人破壞 05/23 01:29
purpose:無法得知。A殺B,B室友C回家發現B死了,此時已非殺人時間 05/23 01:30
QQ29:光看這error msg, 是在alloc出問題,是連帶關係嗎 05/23 01:33
QQ29:想不透就算之前有寫超過buf,alloc也不該壞啊 05/23 01:34
purincess:沒有說是alloc出問題阿 @@ 05/23 02:06
stupid0319:按下中斷不是可以用VC看堆疊嗎? 05/23 02:07
damody:總之是有code寫到不該寫的地方,所以就不能malloc了 05/23 02:08
EdisonX:猜測 : array 存取逾界。 05/23 02:34
Favonia:只要一超過 buf 就有超多方法讓整個程式爛掉喔 :P 05/23 06:55
QQ29:@@我光看他error msg寫HeapAlloc出錯 就猜是malloc 難道不是? 05/23 18:37
littleshan:你搞爛他的metadata導致無法alloc 那他要怎麼報錯? 05/23 18:50
littleshan:不可能神通廣大知道你buf越界吧 05/23 18:51
littleshan:當然只能跟你說 heap 炸掉了所以沒辦法 alloc 05/23 18:51
purpose:你覺得是就已經是了 05/23 19:00
james732:看來原po非常堅信是alloc有問題...那就去慢慢找吧 XD 05/23 23:14
james732:buff越界確實是最有可能的,為什麼不能接受呢?XD 05/23 23:27
QQ29:沒拉 只是我沒他的source code~~ 請問metadata這個詞 05/23 23:50
QQ29:是memory上某一個區塊的 專有名詞嗎? 05/23 23:51
james732:malloc分配memory給你,除了你需要的空間,它還需要記錄 05/23 23:51
james732:一些額外的資訊,譬如這塊記憶體有多長之類的 05/23 23:52
james732:這種資訊就叫做metadata,有可能在空間之前, 05/23 23:52
james732:如果被破壞,free的時候就會缺乏資訊,導致錯誤 05/23 23:53