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中是否发生了内存泄漏。

  • 相关阅读:
    Windows系统下静态库和动态库的生成方法
    c语言 9-9
    c语言中统计字符串中数字字符出现的次数
    c语言 9-8
    c语言 9-7
    c语言中使用putchar显示字符串
    c语言 9-6
    c语言 9-5
    c语言 9-4
    c语言中输出字符串的长度
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1241447.html
Copyright © 2011-2022 走看看