zoukankan      html  css  js  c++  java
  • 转帖:C++程序内存泄露检测

    C/C++程序内存泄漏检测

    1. 包含头文件和定义:
    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    如果定义了_CRTDBG_MAP_ALLOC,打印出来的是文件名和行数等更加直观的信息。

    2. 方法一
    在程序入口写几个语句:
     int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
     tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
     _CrtSetDbgFlag( tmpFlag );
    程序退出时,如果发现有内存泄漏,会自动在DEBUG OUTPUT窗口和DebugView中输出内存泄漏信息。

    3. 方法二
    在程序任何地方用以下语句:
    _CrtDumpMemoryLeaks();
    随时检测打印内存泄漏信息,如果有的话。不过此用法有个局限,对于一些全局函数,如果初始化时申请了内存,到程序结束时候才释放,此函数会一直把新申请的内存当作泄漏来对待。

    4. 方法三
    使用_CrtMemCheckpoint方法,在某段程序中统计泄漏信息。如下:
     _CrtMemState s1, s2, s3;
     _CrtMemCheckpoint( &s1 );
     
     // 程序段1:DO SOMETHING

     _CrtMemCheckpoint( &s2 );
     if ( _CrtMemDifference( &s3, &s1, &s2) )
      _CrtMemDumpStatistics( &s3 );

    可以统计程序段1中是否发生了内存泄漏。

  • 相关阅读:
    fastjson报错 java.lang.StackOverflowError
    关于mybatis使用foreach插入速度较慢的问题
    selectKey返回查询的LAST_INSERT_ID的总是1
    使用java制作https证书
    cf 809
    多校 2009 3
    多校 2009 2
    多校 2009 1
    codeforces 808
    hdu 4734 数位DP
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1241447.html
Copyright © 2011-2022 走看看