[問題] alloc 發生exception 請教

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間14年前 (2012/05/23 00:21), 編輯推噓7(7023)
留言30則, 9人參與, 最新討論串1/1
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

05/23 00:50, , 1F
heap corruption 應該是程式有 Bug,寫入到資料時誤寫到
05/23 00:50, 1F

05/23 00:50, , 2F
像 metadata 這類區域,這跟記憶體不足沒有關係
05/23 00:50, 2F

05/23 00:58, , 3F
緩衝區溢位是一種可能,寫入的資料超過 malloc 配置的容量
05/23 00:58, 3F

05/23 00:59, , 4F
當下溢發生時,電腦無法察覺所以你沒機會 catch exception
05/23 00:59, 4F

05/23 01:00, , 5F
可能性很多,只能自己 google 查 heap corruption how to
05/23 01:00, 5F

05/23 01:20, , 6F
想問下,當下無法察覺那為啥delete時才會爆炸
05/23 01:20, 6F

05/23 01:24, , 7F
之前發文,觀念是os 會回收你alloc的那區塊,但寫超過觸法exc
05/23 01:24, 7F

05/23 01:25, , 8F
eption 倒是很難理解,還是debug版有做手腳
05/23 01:25, 8F

05/23 01:29, , 9F
delete 時要讀取 metadata 才發現損壞,但何時、何人破壞
05/23 01:29, 9F

05/23 01:30, , 10F
無法得知。A殺B,B室友C回家發現B死了,此時已非殺人時間
05/23 01:30, 10F

05/23 01:33, , 11F
光看這error msg, 是在alloc出問題,是連帶關係嗎
05/23 01:33, 11F

05/23 01:34, , 12F
想不透就算之前有寫超過buf,alloc也不該壞啊
05/23 01:34, 12F

05/23 02:06, , 13F
沒有說是alloc出問題阿 @@
05/23 02:06, 13F

05/23 02:07, , 14F
按下中斷不是可以用VC看堆疊嗎?
05/23 02:07, 14F

05/23 02:08, , 15F
總之是有code寫到不該寫的地方,所以就不能malloc了
05/23 02:08, 15F

05/23 02:34, , 16F
猜測 : array 存取逾界。
05/23 02:34, 16F

05/23 06:55, , 17F
只要一超過 buf 就有超多方法讓整個程式爛掉喔 :P
05/23 06:55, 17F

05/23 18:37, , 18F
@@我光看他error msg寫HeapAlloc出錯 就猜是malloc 難道不是?
05/23 18:37, 18F

05/23 18:50, , 19F
你搞爛他的metadata導致無法alloc 那他要怎麼報錯?
05/23 18:50, 19F

05/23 18:51, , 20F
不可能神通廣大知道你buf越界吧
05/23 18:51, 20F

05/23 18:51, , 21F
當然只能跟你說 heap 炸掉了所以沒辦法 alloc
05/23 18:51, 21F

05/23 19:00, , 22F
你覺得是就已經是了
05/23 19:00, 22F

05/23 23:14, , 23F
看來原po非常堅信是alloc有問題...那就去慢慢找吧 XD
05/23 23:14, 23F

05/23 23:27, , 24F
buff越界確實是最有可能的,為什麼不能接受呢?XD
05/23 23:27, 24F

05/23 23:50, , 25F
沒拉 只是我沒他的source code~~ 請問metadata這個詞
05/23 23:50, 25F

05/23 23:51, , 26F
是memory上某一個區塊的 專有名詞嗎?
05/23 23:51, 26F

05/23 23:51, , 27F
malloc分配memory給你,除了你需要的空間,它還需要記錄
05/23 23:51, 27F

05/23 23:52, , 28F
一些額外的資訊,譬如這塊記憶體有多長之類的
05/23 23:52, 28F

05/23 23:52, , 29F
這種資訊就叫做metadata,有可能在空間之前,
05/23 23:52, 29F

05/23 23:53, , 30F
如果被破壞,free的時候就會缺乏資訊,導致錯誤
05/23 23:53, 30F
文章代碼(AID): #1Fkxpx5m (C_and_CPP)
文章代碼(AID): #1Fkxpx5m (C_and_CPP)