CRT检测

定位内存泄漏位置

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

结果

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

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

#include "stdafx.h"
#ifdef _DEBUG
//重新定义new用于内存泄漏检测时输出行号
#define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__)
//重新定义malloc用于内存泄漏检测时输出行号
#define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_NEW
#define DEBUG_MALLOC(s)
#endif
//这句定义不起作用,真神奇,不解,这句本身的作用也是定义#define DEBUG_MALLOC(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__),既然不起作用就自己重新定义了
//#define _CRTDBG_MAP_ALLOC //这个要在DEBUG_NEW 和 DEBUG_MALLOC(s)后面调用,否则不起作用
#include "crtdbg.h" #include <iostream>
using namespace std; #ifdef _DEBUG
#define new DEBUG_NEW
#define malloc(s) DEBUG_MALLOC(s)
#endif _CrtMemState s1, s2, s3; void mleak()
{
int * p3 = new int;
} int _tmain(int argc, _TCHAR* argv[])
{
//在程序退出后检查内存泄漏(程序可能会在多个位置退出,这句适用与在各种情况的退出)
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
char *p1=new char;
char *p2 = (char*)malloc(sizeof(char) * 5); _CrtMemCheckpoint( &s1 );
mleak();
_CrtMemCheckpoint( &s2 ); if ( _CrtMemDifference( &s3, &s1, &s2) )
_CrtMemDumpStatistics( &s3 ); //检测当前内存泄漏,一般写在程序退出之前,但如果析构函数中有delete,本来已经正常释放的内存还会被查出内存泄漏,因为这个函数检查的是当前位置的内存泄漏
//_CrtDumpMemoryLeaks();
return 0; }

参考:

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. Oracle 11gR2 使用RMAN Duplicate复制数据库

    Oracle 11gR2 使用RMAN Duplicate复制数据库     前言:     上周刚做完一个项目,用户要求RAC的数据库可以自己主动备份到另外一个单节点上,单节点可以正常拿起来就能用. ...

  2. Javascript学习之Function对象详解

    JavaScript中的Function对象,就是我们常说的函数对象.在JS中,所有的函数也是以对象的形式存在的. 语法 充当Function对象的构造函数使用,用于结合new关键字构造一个新的Fun ...

  3. 我对Swift的几点疑问

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/caowenbin/article/details/31418773         Swift自问世 ...

  4. zookeeper+dubbo【转载】

    转载地址:http://ahua186186.iteye.com/blog/1912421 注:zookeeper集群是myid文件是没有后缀名的. 转自: http://www.verydemo.c ...

  5. UVA10561 Treblecross —— SG博弈

    题目链接:https://vjudge.net/problem/UVA-10561 题意: 两个人玩游戏,轮流操作:每次往里面添加一个X,第一个得到XXX的获胜. 题解: 详情请看<训练指南&g ...

  6. Jenkins安装部署及tomcat的入门介绍

    这里我们使用的方法是用servlet容器来部署jenkins,使用的是tomcat 下载下来tomcat,解压 bin目录下存放的一些启动关闭批处理文件 conf目录下放的一些配置文件,配置虚拟主机之 ...

  7. uva 401 Palindromes 解题报告

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. Yii 表单验证规则---总结

    Filter: 过滤,'filter'=>'trim',表示去空格 Required:必须的,表示不能为空 Match: 匹配正则,需要和pattern一起使用,定义正则表达式,'pattern ...

  9. 并不对劲的CTS2019

    day0 没有C day1 t1:并不想简述题意 10分暴力走人 t2:有\(n\)个在\([1,D]\)内的均匀随机整数,问有多少的概率出现\(m\)对相同的 设\(f(i,j)\)表示考虑前\(i ...

  10. AutoIt:如何处理应用程序端口被占用的情况

    为公司的部署工程师书写了一个autoIt应用程序,现在遇到下面的一种情况: 产品分服务器端和客户端,启动的时候,会启用1785端口,然后彼此通信: 现在我的autoIt应用程序需要做的事情是: 如果1 ...