CRT检测

定位内存泄漏位置

  1. #include "stdafx.h"
  2. #ifdef _DEBUG
  3.  
  4. #define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__) //重新定义new用于内存泄漏检测时输出行号
  5. #define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)//重新定义malloc用于内存泄漏检测时输出行号
  6. #else
  7. #define DEBUG_NEW
  8. #define DEBUG_MALLOC(s)
  9. #endif
  10. //这句定义不起作用,真神奇,不解,这句本身的作用也是定义#define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__),既然不起作用就自己重新定义了
  11. //#define _CRTDBG_MAP_ALLOC
  12. #include "crtdbg.h"//这个要在DEBUG_NEW 和 DEBUG_MALLOC(s)后面调用,否则不起作用
  13.  
  14. #include <iostream>
  15. using namespace std;
  16.  
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #define malloc(s) DEBUG_MALLOC(s)
  20. #endif
  21.  
  22. int _tmain(int argc, _TCHAR* argv[])
  23. {
  24. _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );//在程序退出后检查内存泄漏(程序可能会在多个位置退出,这句适用与在各种情况的退出)
  25. char *p1=new char;
  26. char *p2 = (char*)malloc(sizeof(char) * 5);
  27. //_CrtDumpMemoryLeaks();//检测当前内存泄漏,一般写在程序退出之前,但如果析构函数中有delete,本来已经正常释放的内存还会被查出内存泄漏,因为这个函数检查的是当前位置的内存泄漏
  28.  
  29. return 0;
  30.  
  31. }

结果

定位调用(内存泄漏函数)位置

设置内存状态快照,用于程序代码分段寻找内存泄漏位置。

  1. #include "stdafx.h"
  2. #ifdef _DEBUG
  3. //重新定义new用于内存泄漏检测时输出行号
  4. #define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__)
  5. //重新定义malloc用于内存泄漏检测时输出行号
  6. #define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
  7. #else
  8. #define DEBUG_NEW
  9. #define DEBUG_MALLOC(s)
  10. #endif
  11. //这句定义不起作用,真神奇,不解,这句本身的作用也是定义#define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__),既然不起作用就自己重新定义了
  12. //#define _CRTDBG_MAP_ALLOC
  13.  
  14. //这个要在DEBUG_NEW 和 DEBUG_MALLOC(s)后面调用,否则不起作用
  15. #include "crtdbg.h"
  16.  
  17. #include <iostream>
  18. using namespace std;
  19.  
  20. #ifdef _DEBUG
  21. #define new DEBUG_NEW
  22. #define malloc(s) DEBUG_MALLOC(s)
  23. #endif
  24.  
  25. _CrtMemState s1, s2, s3;
  26.  
  27. void mleak()
  28. {
  29. int * p3 = new int;
  30. }
  31.  
  32. int _tmain(int argc, _TCHAR* argv[])
  33. {
  34. //在程序退出后检查内存泄漏(程序可能会在多个位置退出,这句适用与在各种情况的退出)
  35. _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  36. char *p1=new char;
  37. char *p2 = (char*)malloc(sizeof(char) * 5);
  38.  
  39. _CrtMemCheckpoint( &s1 );
  40. mleak();
  41. _CrtMemCheckpoint( &s2 );
  42.  
  43. if ( _CrtMemDifference( &s3, &s1, &s2) )
  44. _CrtMemDumpStatistics( &s3 );
  45.  
  46. //检测当前内存泄漏,一般写在程序退出之前,但如果析构函数中有delete,本来已经正常释放的内存还会被查出内存泄漏,因为这个函数检查的是当前位置的内存泄漏
  47. //_CrtDumpMemoryLeaks();
  48. return 0;
  49.  
  50. }

参考:

CRT

浅谈C++中内存泄漏的检测    http://tech.e800.com.cn/articles/2009/1030/1256866753344_1.html

检测内存泄漏的方法     http://blog.csdn.net/fengrx/article/details/4097185

C/C++内存泄漏及检测   http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html

Finding Memory Leaks Using the CRT Library  http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

C++内存泄漏检测的更多相关文章

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

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

  2. 利用Android Studio、MAT对Android进行内存泄漏检测

    利用Android Studio.MAT对Android进行内存泄漏检测 Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的c ...

  3. VS2005内存泄漏检测方法[转载]

    一.非MFC程序可以用以下方法检测内存泄露: 1. 程序开始包含如下定义: #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __ ...

  4. 【转】简单内存泄漏检测方法 解决 Detected memory leaks! 问题

    我的环境是: XP SP2 . VS2003 最近在一个项目中,程序退出后都出现内存泄漏: Detected memory leaks! Dumping objects -> {98500} n ...

  5. Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector

    那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...

  6. _CrtSetBreakAlloc简单内存泄漏检测方法,解决Detected memory leaks!问题

    我的环境是: XP SP2 . VS2003 最近在一个项目中,程序退出后都出现内存泄漏: Detected memory leaks! Dumping objects -> {98500} n ...

  7. Android内存泄漏检测利器:LeakCanary

    Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...

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

    在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...

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

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

  10. Android 性能优化之内存泄漏检测以及内存优化(中)

    https://blog.csdn.net/self_study/article/details/66969064 上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析, ...

随机推荐

  1. Sping中Bean配置的深入探讨

    一.p命名空间的使用 Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 <bean> 元素属性的方式配置 Bean 的属性.使用 p 命名空间后,基于 XML 的配 ...

  2. [Phoenix] 二、数据类型

    目前Phoenix支持24种简单数据类型和1个一维Array的复杂类型.以下是对支持数据类型的说明: 1. INTEGER 2. UNSIGNED_INT 3. BIGINT 4. UNSIGNED_ ...

  3. Android笔记之DrawerLayout的基本使用

    效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  4. Java+Jsoup实现网页内容抓取

    不知不觉毕业快一年了,工作逐渐趋于平淡,从一个对编程了解得很少甚至完全一窍不通的小小菜,终于成为了一枚小菜,总而言之,算是入了IT这一行.这大半年马马虎虎做了三个项目,有安卓项目,有Java Web项 ...

  5. div和span、relative和absolute、display和visibility的区别

    一.div和span的区别 div是一个块级元素,可以包含段落,表格等内容,用于放置不同的内容.一般我们在网页通过div来布局定位网页中的每个区块. span是一个内联元素,没有实际意义,它的存在纯粹 ...

  6. mysql初始化命令及其他命令

    这个问题纠结了我两年: 为了配置my.cnf中 undo的 参数生效,以及生成undo文件,使用一下命令 /usr/bin/mysql_install_db   --defaults-file=/et ...

  7. python并发编程之多线程理论部分

    阅读目录 一 什么是线程 二 线程的创建开销小 三 线程与进程的区别 四 为何要用多线程 五 多线程的应用举例 六 经典的线程模型(了解) 七 POSIX线程(了解) 八 在用户空间实现的线程(了解) ...

  8. LaTeX常用的符号

    推荐新手使用的网站:http://latex.codecogs.com/eqneditor/editor.php \(\sum _{d|n}{u(d)F(\frac{n}{d})}\) \sum _{ ...

  9. ubuntu 下编译安装ceph

    git clone --recursive https://github.com/ceph/ceph.git  cd ceph/  sudo apt-get install libtool   sud ...

  10. C++之自己实现的String类全部

    一:回顾 (1)c++中的string类是在面试中和笔试中经常考的题目: 工程代码免费下载 string类的自行实现 (2)c++中的string类和fstream类合起来是处理外部数据的利器: (3 ...