關於記憶體流失檢測的一些方法

來源:互聯網
上載者:User

    #define _CRTDBG_MAP_ALLOC  //顯示記憶體塊類型和記憶體塊分配編號
    #include <crtdbg.h>

    ...........

     //在輸出視窗查看記憶體流失資訊,在程式結束前加入:

     _CrtDumpMemoryLeaks();  //退出程式位置固定時

     或者
     _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );// 當退出位置不固定時

    運行程式,看輸出資訊:

  

   

   

     output記憶體流失資訊結構:
    1.記憶體配置的編號(大括弧中的數字)
    2.記憶體塊的類型(普通型、用戶端型、CRT型)
    3.16進位表示的記憶體位置
    4.記憶體塊的大小
    5.前16bytes的內容

   

    可以指定編號,定位記憶體流失的位置,如在程式開始時加上:

    _CrtSetBreakAlloc(3442);

    再運行則在記憶體流失處停住。

    還有一種簡單的檢測一段代碼是否有記憶體流失的方法:

    在要檢測的代碼前加:

     _CrtMemState s1, s2, s3;

     _CrtMemCheckpoint( &s1);

    在代碼執行後加:

    _CrtMemCheckpoint( &s2);

    if ( _CrtMemDifference( &s3, &s1, &s2) ) 

        //若執行到此處則說明上面代碼有記憶體流失

         _CrtMemDumpStatistics( &s3 );

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.