1. 程式人生 > >【問題:崩潰】Critical error detected c0000374

【問題:崩潰】Critical error detected c0000374

 

具體場景出現在new分配記憶體中,VS輸出資訊為: Critical error detected c0000374.也就是堆管理器嘗試在0xc0000374這個地址分配記憶體,但是這裡是核心模式地址區域,堆管理器是不可能指定這個地址的.所以很明顯,堆資料被溢位篡改了,即堆破壞問題.接下來就要尋找是哪裡發生了資料溢位,對於沒經驗的我來說這無異於大海撈針啊.於是我初略嘗試了一下OD跟蹤和資料斷點不行後,開始上網查詢比較通用的解決方案.

  先是發現個Bounds Checker,花了不少時間安裝和把玩,最後淚流滿面的發現解決不了問題.然後發現有介紹Page Heap這個機制的文章,並講解了如何使用WinDbg的gflags.exe工具來開啟它,連結如下:

 

http://www.brucesky.com/index.php/articles/604

 

  於是我對程式開啟完全頁堆檢測後,終於在執行時直接崩在了資料溢位的地方.原來是OgreRecast庫中的一個數組越界賦值.修改了即變得正常.這也是能理解的,一個人維護的開源的東西能給你用給你原始碼,已經很大程度上減輕你的工作量了.

  WinDbg - gflags.exe