標籤:corruption windows window
調試代碼時遇到類似如下的問題:
Windows has triggered a breakpoint in .exe.
This may be due to a corruption of the heap, which indicates a bug in .exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while .exe has focus.
The output window may have more diagnostic information
看到這樣的錯誤可以斷定是堆記憶體使用量錯了,可能是申請的堆記憶體沒有釋放、記憶體使用量越界或使用了一段已經被銷毀的記憶體。
如下代碼:
......
BufferL buffer;
size_t buffer_len;
size_t src_buffer_len = motivation.data_len;
buffer_len = src_buffer_len;
buffer.resize( src_buffer_len );
SRes ret = LzmaCompress( &buffer[sizeof(xxx)], &buffer_len, &src_buffers[0], src_buffer_len, outProps, &outPropsSize );
首先給buffer 的size是src_buffer_len 的長度,即為src_buffers的長度。src_buffers壓縮後的長度為buffer_len,如果buffer_len > src_buffer_len的話,那麼壓縮的時候將出現賦值越界的問題,因為接收資料的buffer長度為src_buffer_len。這樣就有可能出現 “Windows has triggered a breakpoint ”的問題,可能在賦值越界時不會立即出現此問題,但是這個問題是遲早會出現的。
所以說,良好的編碼習慣很重要。
網上有人推薦pageheap.exe 來檢查記憶體越界的問題。具體請查閱:
http://c.360webcache.com/c?m=fc2dda77b80c762a85d8be5548bf19f1&q=windows+has+triggered+a+breakpoint&u=http%3A%2F%2Fwww.xuebuyuan.com%2F759315.html,
以上,2017.03.02
本文出自 “技術知識梳理” 部落格,轉載請與作者聯絡!
Windows has triggered a breakpoint in...... 的問題