检查C++内存泄露

#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC

#include <assert.h>
#include <stdlib.h>
#include <crtdbg.h>

#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif

///此函数在程序入口处首先调用
///会在output的窗口中输出检查结果

void CheckOnExit()
{
   _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
   int mCount = _CrtDumpMemoryLeaks();
   assert( mCount == 0);
}

void main()
{
   atexit(CheckOnExit);
   ...
}

此外,还可以使用Visual Leak Detector这个工具来检测

http://vld.codeplex.com/

时间: 2024-10-31 20:57:32

检查C++内存泄露的相关文章

Linux Debugging (九) 一次生产环境下的“内存泄露”

一个偶然的机会,发现一个进程使用了超过14G的内存.这个进程是一个RPC server,只是作为中转,绝对不应该使用这么多内存的.即使并发量太多,存在内存中的数据太多,那么在并发减少的情况下,这个内存使用肯定会降下来.但是事实上,这个内存会一直涨,直到被OOM Killer杀掉. 由于这个rpc server的逻辑比较简单,先走读源码,除了发现一些简单的编程上面的问题外,没有大的问题.先上valgrind: valgrind --tool=memcheck --leak-check=full -

c++ 内存泄露的检查

对于c++的内存泄露检测,除了我们自己手动检查以外,还可以使用c++中的函数来帮助我们检测, 如下代码: #include "stdafx.h" #include <string> #include<iostream> #include <crtdbg.h> using namespace std; int main() { char *p=new char[10]; //char *pp=new char[100]; delete p; _CrtD

简单介绍使用Eclipse Memory Analyze Tool来检查内存溢出和内存泄露

1. 安装Eclipse Memory Analyze Tool(Eclipse MAT) Eclipse Help --> Install New Software... --> Add... --> 如下图 -> finish 重启 就行了 PS: MAT新版本的链接在此http://www.eclipse.org/mat/downloads.php (Location填的是Update Site) 2. 使用MAT跑Java项目的Dump,检查内存溢出和内存泄露 右键Java

C++内存泄露检查方法

重载全局new 可以写多个版本的new,却只有一个delete: 重载全局new会发生一些不匹配的串扰,尤其是有第三方库的情况下: 我的解决办法 重载单个class的new: 原始类型不能重载,那就使用类似于malloc的办法分配: 我的cfan开源库实现了这个方法 操作系统hook机制 http://my.oschina.net/chunquedong/blog/271248 这些都不跨平台,使用也不方便: valgrind等工具 不跨平台: 除非能实现持续集成,否则很难及时反馈: 有时候引起

raywenderlich写的关于内存管理,第二篇,关于如何检查内存泄露

原文链接地址:http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial 著作权声明:本文由http://www.cnblogs.com/andyque翻译,欢迎转载分享.请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 教程截图: 作为一名无证程序员,无论你多么精通Objective-C的内存管理,随着时间的推移,你也不可避免的犯内存相关的错误.但通常因为代

valgrind--CPP程序内存泄露检查工具

内存泄漏是c++程序常见的问题了,特别是服务类程序,当系统模块过多或者逻辑复杂后,很难通过代码看出内存泄漏. valgrind是一个开源的,检测c++程序内存泄漏有效工具,编译时加上-g选项可以定位到代码行,同时还检查'野指针',检查malloc与free是否匹配等功能. 参考: 1. Linux下几款C++程序中的内存泄露检查工具 2. linux工具之检测内存泄漏-valgrind 原文地址:https://www.cnblogs.com/embedded-linux/p/9749332.h

android 内存泄露 /进程 内存检查 --DDMS工具

一.监控操作步骤 1.打开eclipse,切换到DDMS模式,连接设备,打开usb调试,如图: 2.在devices栏中会显示连接的设备,选择要监控的程序包名 3.点击devices视图中update Heap 4.在Heap视图中点击Gause GC, 二.判断内存泄露 Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象.在data object一行中有一列是"Total Size",其值就是当前进程中所有Java数据对象的

VS2010检查内存泄露

VS2010中的C++程序内存泄露检测 对于MFC程序是支持内存检测的.对于非MFC程序而言,CRT有一套内存泄露的函数,最常用的是 _CrtDumpMemoryLeaks();如下所示: #include <crtdbg.h> int main() { int *pInt = new int(); char *pChar = new char(); double *pDouble = new double(); // position 1 _CrtDumpMemoryLeaks(); ret

【转】VLD(Visual LeakDetector)内存泄露库的使用

转载自http://blog.csdn.net/fan_hai_ping/article/details/8023433 VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难.当您的程序越来越复杂时,它的内存管理也会变得越来越困难.内存泄漏.内存越界是最常见的内存问题之一. 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉.但是对于长时间运行的程序,其破坏力是