Debug error:Heap Corruption Detected

2020-08-14 21:08:15

問題

在这里插入图片描述
主要問題在於動態分配記憶體時,在堆尾端內粗寫入數據導致。

當時循着這條思路,debug偵錯到在輸出資訊時,在showStauts()函數裡,有個GetStatusString(w_chart* pOutString,const BYTE* pdata,ulong daLen);呼叫堆疊顯示裏面問題,說實話當時我通過新老版本對比發現沒啥問題,老版本可以,但是新版本不行。但是定位卻在這裏,後來發現這個函數通過讀寫某個status檔案,然後顯示在視窗裏,而老版本是加密的,新版本沒有加密導致數據去讀寫分配數據量可能不一樣,然後試着將新版本status檔案加密,問題就解決了。
參考部落格

本質

這個錯誤是說C語言執行庫發現有程式在所分配的堆末尾記憶體寫入數據,由於堆實在動態分配記憶體會要申請的,可能沒有下界限保護,導致存取時會崩潰。

心得體會

對於此問題解決時,目標方向要定位明確,沿着這個問題方向思考,結合debug定位點,綜合發現兩個版本不同差異,可能會更快發現問題。