C++常見內存溢出錯誤


錯誤提示

HEAP CORRUPTION DETECTED:after Normal block(#) at 0x*.

CRT detected that application wrote memory after end of heap buffer.


錯誤原因

使用的內存大於申請的內存,所以在釋放內存時會發生錯誤。

案例

圖片資源加載失敗

圖片資源加載失敗

圖片資源加載失敗

在上面的代碼中,申請了n個結構體數組的堆內存,需要保存的內容為Unicode編碼下的數據,最后一個數據為權限字符串,"高級"或者"普通",當使用strcpy對結構體成員數組進行填充時,實際的大小為4+2=6個字節,因為字符串還有一個'\0',在Unicode中為兩個字節。所以拷貝后去釋放內存時,就會出錯,並提示越界使用內存。所以需要把結構體最后一個成員數組增加一個TCHAR空間用來存放0結尾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM