[問題] 神秘的堆積損毀(heap corruption)

看板C_and_CPP (C/C++)作者 (無虧/明月幾時有?)時間16年前 (2010/05/25 00:50), 編輯推噓2(209)
留言11則, 5人參與, 最新討論串1/1
VC2005, compiled with /clr (母體是managed, libraries是unmanaged) 用release mode、不偵錯也一樣crash 程式跑一跑中斷, 說可能有堆積損毀, 是我的exe或dll有bug。 不過其實我也只是把new的陣列個數變少而已... 原本 ary = new MyStruct[n]; // n>=10 都不會有錯, 但當我調成 n=6 時, 就出錯了...... 我的程式是個大程式, 利用中斷點夾擠出是在這行new memory時出的錯, 但接下來就完全無法判斷問題出在哪了 VC也只告訴我卡在這行: (malloc.c) #ifdef _WIN64 return HeapAlloc(_crtheap, 0, size ? size : 1); #else /* _WIN64 */ if (__active_heap == __SYSTEM_HEAP) { return HeapAlloc(_crtheap, 0, size ? size : 1); //size = 84 } else if ( __active_heap == __V6_HEAP ) { if (pvReturn = V6_HeapAlloc(size)) { return pvReturn; } } 說真的我是第一次聽說new的個數變少程式反而會出錯的..... 會是memory leak之類的關係嗎? -- 我們要打快樂的籃球! 而無限的快樂是-- 知道自己不斷的在進步。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.167.31 ※ 編輯: ec75413 來自: 114.37.167.31 (05/25 00:54) ※ 編輯: ec75413 來自: 114.37.167.31 (05/25 01:16)

05/25 01:20, , 1F
miss alignement?
05/25 01:20, 1F

05/25 01:44, , 2F
你把 pointer 指到 heap 物件周圍的非法區域亂寫就有可能
05/25 01:44, 2F

05/25 01:44, , 3F
會發生了,但不是立即發生,要讓它自然損毀到一個程度。
05/25 01:44, 3F

05/25 01:56, , 4F
google "heap corruption" 第一篇... 怪了 我沒遇過說...
05/25 01:56, 4F

05/25 10:02, , 5F
malloc.c應該不是你寫的而是VC的吧?? 不用看到那個file
05/25 10:02, 5F

05/25 10:02, , 6F
去, 會在那個點撞出error只是因為heap爛了, 而你再次要
05/25 10:02, 6F

05/25 10:03, , 7F
heap空間時它才抓到你的heap已經爛了, 基本上八成都是你
05/25 10:03, 7F

05/25 10:04, , 8F
寫到超過範圍的heap範圍去吧; new n減少了, 那有沒有其
05/25 10:04, 8F

05/25 10:04, , 9F
它的code存取該array它的迴圈範圍什麼的沒跟著改到的??
05/25 10:04, 9F

05/25 12:33, , 10F
也有可能是區域變數的 stack 毀了
05/25 12:33, 10F

05/25 20:43, , 11F
在你new出來的空間前後幾個bytes加上data break point
05/25 20:43, 11F
文章代碼(AID): #1B-gvLfY (C_and_CPP)
文章代碼(AID): #1B-gvLfY (C_and_CPP)