Windows has triggered a breakpoint in...... 的問題

調試代碼時遇到類似如下的問題:


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章