在window 下开发进行内存泄漏的检测相对比较容易。 这里只是简单的记录一些东西,没有具体的谈论实现。 window 下面内存检测主要可以考虑从两个方面入手,这两个方面并不是一个if else 分支。
   1、如果你在MS 的开发环境下,(其他的开发环境不是很熟悉),可以使用MS 内部定义的调试库,使用他们是比较简单的,下面就简单的写一个例子:
    #include  <crtdbg.h>
    int main() { char *pString = new char[8] ; _CrtDumpMemoryLeaks(); return 0; }
    通过上面的例子,就就知道了如何使用这些调试库,首先是保护这个调试库的头文件,具体调试库提供了那些api,可以到.h文件中看看, Dump Meory Lead 只是其中的一个而已。要注意的事情是这些函数只能使用在debug 版本的程序中。 另外一个比较实用的例子就是通过设置内存状态检测点来比较内存的变化,从而排查出内存泄漏的地方。 涉及到的三个api 函数是: 设置内存状态检测点:_CrtMemCheckPoint(&memstate);  比较内存状态检测点之间的差异:_CrtMemDifference (&memstate_difference , & memstate_original, & memstate_now ) ; 显示内存状态的差异:_CrtDumpAllObjectsSince(&memstate_defference);  具体使用可以看看msdn 。

2、另外实现的方法就是自己重载new、delete、malloc、free 等内存分配和释放的函数,通过设置一个list 来记录内存分保的情况。 可以通过这样的框架来实现这个公共: A 、#define new  DEBUG_NEW
          B、#define DEBUG_NEW(nSize) NewFunc((nSize),THIS_FILE, __LINE__)  //或者通过重载new 的方法来实现
         C、void * NewFunc(size_t  size , const char *pFileName , int nLine)
               {
                            // Lock list
                            //Allocate memory
                            //Add the memroy object to the list 
                            //Unlock list
                            return memory ;
              }
        D 、Free 的实现类似。
        这样的话,在程序推出的时候,就可以dump 出说有分配了但是没有释放的内存。 多数自己实现防止内存泄漏的方法都是这样的。

MS 在MFC 还提供了一个类 CMemoryState 和一些API , AfxCheckMemory,AfxDumpMemoryLeaks .... 都是很方法的方法。

MS 推荐的检测内存泄漏的方法的是这样的:
       1、跟踪内存分配的情况,使用DEBUG_NEW 来代替new 完成内存分保的操作, 在很多MFC 的项目中,在.cpp 文件中可以看到很多 define new DEBUG_NEW ,就是为了这个目的。
       2、允许内存诊断,可以通过 AfxEnableMemoryTracking 函数来设置允许内存诊断,如果不使用MFC 的项目中,可以直接通过函数 _CrtSetDbgFlag 来设置 _CRTDBG_ALLOC_MEM_DF 标识。具体可以看看这个函数的source code。 设置之后你就可以使用 AfxCheckMemory 之内的api 来进行内存检测了。 其实这个函数也是直接调用了_CrtCheckMemory 函数,这样在不是MFC 的环境,就可以直接调用 _CrtCheckMemory 函数。
      3、对内存做快照,通过比较内存快照的变化来找出内存泄漏的地方。这个就是上面说的方法。
      4、查考内存的统计数据,可以通过CMemoryState::DumpStatistics 来完成,具体可以看看CmemoryState 这个类的用法。
      5、Object Dump ,这个是通过 CMeoryState ::DumpAllObjectsSince
 来完成对象的dump 。

window 下内存泄漏检测相关推荐

  1. Linux环境下内存泄露检测

    linux下内存泄漏检测工具valgrind 该工具可以检测下列与内存相关的问题 : 未释放内存的使用 对释放后内存的读/写 对已分配内存块尾部的读/写 内存泄露 不匹配的使用malloc/new/n ...

  2. C++内存泄漏检测工具

    C++内存泄漏检测工具 1.VC自带的CRT:_CrtCheckMemory   调试器和 CRT 调试堆函数 1.1用法: /************************************ ...

  3. Windows平台下的内存泄漏检测

    Windows平台下的内存泄漏检测 一.使用_CrtDumpMemoryLeaks定位内存泄露 添加对应的头文件 转储内存泄漏信息 程序任意点退出 指定调试信息输出 二.定位具体内存泄露位置 内存快照 ...

  4. Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  5. Android内存泄漏检测工具使用手册

    Android内存泄漏检测工具使用手册 前言 LeakCanary 在Android中接入LeakCanary LeakCanary内存泄漏分析 内存泄漏上报到服务端 Shark Shark分析当前应 ...

  6. OpenCV中的内存泄漏检测

    转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏 ...

  7. 基于Android Studio的内存泄漏检测与解决全攻略

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  8. 内存泄漏检测工具(转载)

    内存泄漏检测工具2007年08月08日 1.     ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库. 2.     Dmalloc-Debug ...

  9. C++ 程序内存泄漏检测方法

    一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成"统一&qu ...

最新文章

  1. 监听Settings的值的变化
  2. (轉貼) Embedded System與System on Chip的差異 (IC Design)
  3. Nginx server_name通配符匹配配置
  4. 花音机器人_【扑杀花音攻略组】超弩级光机器人攻略
  5. oracle10g 操作系统,各版本操作系统ORACLE 10g 下载(包括windows和linux)
  6. C#中的主从Datagridview
  7. java共享内存_Java共享内存
  8. python系统下载-pythonox下载
  9. 固态硬盘开卡软件_SATAFIRM S11 MSATA固态硬盘刷固件
  10. idea进入方法快捷键详情大全(idea快捷键大全最新设置)
  11. 摄像头网络信号测试软件,工程宝如何测试摄像机
  12. 阻止软件连接网络(Win)
  13. 利用计算机网络实现OA的功能,中小企业oa办公系统解决方案怎么做?
  14. 深入支付宝支付扫描支付-跳转支付宝二维码页面支付与自定义生成二维码支付-2跳转固定的支付宝页面进行扫码支付
  15. 这六大要素教会你挑选合适的酒店管理系统
  16. 机器学习训练模型的大体流程
  17. 专升本英语——语法知识——高频语法——第一节 时态和语态——动词时态被动语态(全称)【学习笔记】
  18. 【C++】内联函数是什么?内联和宏有什么区别?
  19. Hutool-crypto加密工具
  20. Android 文件转base64字符串,json文件转对象

热门文章

  1. 探讨一下Java单例设计模式
  2. python + hadoop (案例)
  3. RunJs使用评测(IE9)
  4. administrator自动登录桌面
  5. 小米手机反复提示“请勿遮挡听筒区域“
  6. spring架构整理
  7. python连接neo4j
  8. Error Based Pruning剪枝算法、代码实现与举例
  9. 大话数据结构 06:栈 顺序存储结构
  10. 音频降噪处理+java_适当的音频捕获和降噪