• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > C++內存泄漏檢測拾遺

    C++內存泄漏檢測拾遺

    作者: 時間:2011-05-29 來源:網絡 收藏

    在MFC開發環境中,當運行退出了,Visual Studio會在輸出窗口提示是否有。也可以借助MFC類CMemoryState動態地并輸出信息。

    本文引用地址:http://www.czjhyjcfj.com/article/150684.htm

      在非MFC框架中,需要借助CRT函數實現這些功能。

      1. 調用_CrtDumpMemoryLeaks()函數會在輸出窗口中輸出當前的。若在程序開始處加上:_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

      語句,CRT會在程序的每個出口處自動調用_CrtDumpMemoryLeaks函數,因此程序終止時會在輸出窗口顯示所有的內存泄漏。

      2.利用_CrtMemState結構定點監測內存泄漏,例:

      //定義3個內存狀態

      _CrtMemState s1,s2,s3;

      //記錄開始的內存狀態

      _CrtMemCheckpoint( s1 );

      int *p = new int;

      //記錄結束時的內存狀態

      _CrtMemCheckpoint( s2 );

      //比較2個內存狀態,并將差異保存到s3中

      if( _CrtMemDifference( s3, s1, s2 ) )

      {

      //輸出內存泄漏信息

      _CrtMemDumpAllObjectsSince( s3 );

      }

      3. 重定向輸出信息。內存泄漏提示默認是輸出在輸出窗口中,可以通過_CrtSetReportMode重定向其輸出位置。例(重定向輸出到指定文件):

      CAtlFile hFile;

      hFile.Create( _T(D:report.txt), GENERIC_WRITE, FILE_SHARE_WRITE, CREATE_ALWAYS );

      _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );

      _CrtSetReportFile( _CRT_WARN, hFile );

      此外還可以重定向為窗體提示(帶有終止、繼續、忽略按鈕的窗體),斷言就是輸出為此窗體。還可以通過_CrtSetReportHook函數在輸出到指定目的地之前攔截消息。如:

      _CrtSetReportHook( MyReportingFunction );

      MyReportingFunction 的定義如下:

      int MyReportingFunction( int nReportType, char *szMsg, int *pRetVal )

      {

      *pRetVal = 0;

      if( nReportType == _CRT_WARN )

      {

      AtlMessageBox( NULL, _U_STRINGorID( CA2T(szMsg)));

      }

      return 0;

      }



    關鍵詞: 拾遺 檢測 泄漏 內存

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 扎兰屯市| 哈密市| 雅江县| 榆社县| 金平| 景德镇市| 惠东县| 桦川县| 临湘市| 郓城县| 长垣县| 平邑县| 新乡市| 阿拉善盟| 右玉县| 高碑店市| 两当县| 桂平市| 五大连池市| 通化市| 梅州市| 三台县| 聂拉木县| 白山市| 静安区| 登封市| 开封市| 安阳县| 鹤壁市| 安龙县| 新郑市| 宝兴县| 恩平市| 包头市| 色达县| 泽普县| 峡江县| 弥渡县| 察隅县| 富锦市| 永春县|