調試代碼時遇到類似如下的問題:
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 來檢查內存越界的問題。具體請查閱:
以上,2017.03.02