乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      段錯誤: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)有關,理由是:

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

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

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

      但,發(fā)生該異常的錯誤居然提前到類B構造函數(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)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多