解決一個信號6問題(sig6,signal6,SIGABRT,double free or corruption (!prev))

我遇到的信號6 99%都是由於數據越界導致,在memcpy的時候沒有錯誤,在free的時候系統報SIGABRT。今天也不例外。代碼是我寫的,考慮不周,以後拷貝更多加小心。

gdb信息

假象結構

上圖中的data大小爲1024,如果memcpy 1025各字節,拷貝正常,但是在你free它的時候就會報上面截圖中的錯誤。這就是原因。遇到這種問題不要怕,新手不要給自己設置障礙,信號是系統提供給你的幫助,而不是困難。解決這個問題的難點不是找到問題點,gdb基本會告訴你位置。難點是如何修改,尤其在代碼不是你編寫的時候。好在今天這個是我自己寫出來的,雖然是半年以前寫的,剛看到的時候看不懂,但捋一捋還是把邏輯搞清楚了,然後就是看如何修改能保證原有功能,還不會引入新問題。無非就是加檢查判斷嘛~沒有其他。

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