小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

段錯誤:smallbin double linked list corrupted

 slimfeng 2019-02-12
昨天一個原本運行良好的工程發(fā)生了下述錯誤:
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***
進程崩潰,顯示底層發(fā)送了一個段錯誤信號。

/////////////////////////////////////////////////////////////////////////////////////////

遂上網(wǎng)搜索,引用一下別人的文章:

*** glibc detected *** free(): invalid pointer:
*** glibc detected *** malloc(): memory corruption:
*** glibc detected *** double free or corruption (out): 0x00000000005c18a0 ***
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***

內(nèi)存問題始終是c++程序員需要去面對的問題,這也是c++語言的門檻較高的原因之一。通常我們會犯的內(nèi)存問題大概有以下幾種:
1.內(nèi)存重復釋放,出現(xiàn)double free時,通常是由于這種情況所致。
2.內(nèi)存泄露,分配的內(nèi)存忘了釋放。
3.內(nèi)存越界使用,使用了不該使用的內(nèi)存。
4.使用了無效指針。
5.空指針,對一個空指針進行操作。

/////////////////////////////////////////////////////////////////////////////////////////
我檢查了工程大多數(shù)new delete以及strcat,vsprintf,memcpy, memset, memmove等一些內(nèi)存操作函數(shù)的地方,都沒有發(fā)現(xiàn)問題。


不斷調(diào)試發(fā)現(xiàn)每次發(fā)生問題的地方還不太一樣。

但大多(不是全部)似乎和一個類(姑且稱作類A)有關(guān),理由是:

1) 我發(fā)現(xiàn)這個類A沒有正常delete,于是我加了一句delete:

但,居然在delete類A的時候發(fā)生該異常。

2) 于是我把new A的語句提前,放在另一個類B構(gòu)造函數(shù)里,然后僅在類B的析構(gòu)函數(shù)里delete。

但,發(fā)生該異常的錯誤居然提前到類B構(gòu)造函數(shù)之后的另一個類C的new的地方。

3)其他莫名其妙出錯的地方都發(fā)生在new類A的之后。


因為這個類A是屬于一個動態(tài)庫里的,我第一時間懷疑是不是頭文件和庫文件不一致導致的。因為這個類A在其他工程里運行良好。

于是從其他工程里復制其頭文件,覆蓋本工程。

重新編譯工程,運行,再也不出錯了。


因為發(fā)生這個錯誤情況,網(wǎng)上大多把錯誤原因歸咎于內(nèi)存泄露,所以我覺得有必要記錄一下我這個解決辦法。


        

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多