我調試其最終崩潰與下列消息之一的軟件:調試Visual C++內存分配問題
1. DAMAGE: after normal block (#24729280) at 0x00D710E0
2. Debug Assertion Failed
Program: D:\Soft\Test.exe
File: dbgheap.c
Line: 1017
Expression: _BLOCK_TYPE_IS_VALID(phead->nBlockUse)
這個軟件是真的老了,但現在改變它不是一個選項。它是用Visual C++ 6.0編寫的。我們猜測它是某種緩衝區溢出,所以我們試圖找到方法來檢測它發生的位置。
我發現有關PageHeap(它似乎能夠告訴我我想要什麼)和GFlags的信息,但似乎我無法使其工作。
我創建了一個測試程序:
char* test;
test = new char[5];
test[5] = 'a';
delete[] test;
這就引起一個錯誤:
DAMAGE: after normal block (#55) at 0x1671920
然後,我試圖附着頁堆將其通過運行:
gflags.exe /p /enable MemoryTest.exe /full
,然後重新運行它(通過Visual C++ 6.0界面和通過Windows資源管理器)都會導致相同的錯誤。
然後我試圖編譯發行版本,並運行它通過Visual C++ 6.0接口得到錯誤:
User breakpoint called from code at 0x7c90120e
,並從Windows資源管理器,我剛剛得到了Windows對話框,詢問我送錯誤報告。
我錯過了什麼?
我試圖用它來調試我構建的示例程序。管理到步驟5(重新加載PDB文件),然後按f5。那是當我得到兩個錯誤:損壞的後綴模式和損壞的堆塊,但我不明白如何或爲什麼發生...... – Rodrigo 2009-04-23 18:58:05