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();

	return 0;
}

运行之后,结果如图1所示:

可以看到,在第71,72,73次({71}{72}{73})分配内存时发生了泄露,略有不足的是,没有显示出是哪一行导致的内存泄露。将#include <crtdbg.h>(<crtdgb.h>必须被包含)改为如下:

#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK   new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif

运行之后,结果如图2所示:

可以看到是因为main.cpp的第16行导致了4 bytes的内存泄露,第17行...

但是这段代码仍然存在一些问题,例如_CrtDumpMemoryLeaks()放在position 1时,虽然接下来使用delete释放new分配的内存,但是运行后结果与图2仍然相同。如下所示:

int main() {
	int *pInt = new int();
	char *pChar = new char();
	double *pDouble = new double();
	// position 1
	_CrtDumpMemoryLeaks();

	delete pInt;
	delete pChar;
	delete pDouble;
	//position 2
//	_CrtDumpMemoryLeaks();
	return 0;
}

最好的办法是将_CrtDumpMemoryLeaks()放置在函数的出口处(如position 2处)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 15:27:32

VS2010检查内存泄露的相关文章

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

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

Android Monkey 脚本编写与检查内存泄露

一.Monkey脚本编写 1.Monkey脚本格式 脚本优势: 简单快捷,不需要接触任何工具,只需要一个记事本文件 脚本缺点: 实现坐标.按键等基本操作的相应步骤,顺序脚本无逻辑性 脚本源码: \development\cmds\monkey\src\com\android\commands\monkey\MonkeySourceScrip.java #头文件.控制monkey发送消息的参数 type=raw events count=10 speed=1.0 #以下为monkey命令 star

java内存泄露

Java是如何管理内存 为了判断Java中是否有内存泄露,我们首先必须了解Java是如何管理内存的.Java的内存管理就是对象的分配和释放问题.在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间.另外,对象的释放是由GC决定和执行的.在Java中,内存的分配是由程序完成的,而内存的释放是有GC完成的,这种收支两条线的方法确实简化了程序员的工作.但同时,它也加重了JVM的工作.这也是Java程序运行速度较慢的原因之一.因为,G

关于使用json库成的内存泄露问题

上篇博文"将传入结构体 pMtInfo 中包含的数据内容转换成 JSON 字符串返回"的代码虽然运行结果正确,但是造成了严重的内存泄露,上篇博文链接如下:http://my.oschina.net/BambooLi/blog/514946 用Linux内存泄露工具valgrind进行内存检查 valgrind介绍 Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访

c/c++服务器程序内存泄露问题分析及解决

由 www.169it.com 搜集整理 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题:Garbage Collection技术在Java中已经比较成熟,但是在c/c++领域的发展并不顺畅,虽然很早就有人思考

内存泄露、内存溢出以及解决方法

内存泄露是指程序在运行过程中动态申请的内存空间不再使用后没有及时释放,从而很可能导致应用程序内存无线增长.更广义的内存泄露包括未对系统的资源的及时释放,比如句柄等. 内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界:尤其是对缓冲区写操作时,缓冲区的溢出很可能导致程序的异常. 一.内存泄露 "知己知彼,方能百战不殆",如果我们能够比较清楚的了解在编程的时候哪些情况容易导致内存泄露,通过避免这些糟糕的情况,从提高代码的质量本身出发,来抵御潜在导致内存泄露的发生. 1.1先来看看内

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

vs2010使用vld检测内存泄露

cocos2d-x不仅可以做到跨平台运行,还可以做到跨平台编译调试(当然只是编译对应平台下的应用了).众所周知,cocos2d-x是用c++编写的,而c++中最让人头疼的莫过于指针和内存泄露的问题,在windows下,cocos2d-x支持在vs下开发,这样,平时写win32项目的开发工具就可以用在cocos2d-x开发上了,善哉!今天就介绍一个检测内存泄露的工具,Visual Leak Detector,简称 vld 1.安装 这一步很简单,官网已经在上面给了,直接download吧,跳过!

简单介绍使用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