C++内存泄露调试
我在看DirectX Sample的时候,看到以下代码:
// Enable run-time memory check for debug builds.
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
既然是debug,肯定是多输出了什么信息,根据注释来看,应该是可以检测出内存使用的相关错误。而在C++中,内存泄露一直是一个很蛋疼的问题,以前不知道有什么方法解决。顺着这段代码上网搜了下,果然有内存泄露的检测。
以下转自http://blog.csdn.net/hayyoung/article/details/8565871
一、vs监测内存泄露,利用crt库就可以,不需要利用专门的工具。操作仅2步。
1、增加宏和头文件
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
注意:为了保证这三行代码的顺序,最前面放这三行代码。假设我们在这3行之前,增加#include <iostream>, 因iostream包含了stdlib.h,则会隐式破坏顺序,导致malloc函数内存泄露的时候,输出信息窗口不显示具体的行数。
2、程序仅一个出口(return),在需要监测地方,调用_CrtDumpMemoryLeask函数,运行程序后,输出消息窗口显示内存泄露的地方。
_CrtDumpMemoryLeaks();
如果程序有几个出口(return),不需要显式调用_CrtDumpMemoryLeask(),仅用_CrtSetDbgFlag 设置_CRTDBG_ALLOC_MEM_DF and_CRTDBG_LEAK_CHECK_DF即可
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
例1:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> int main()
{
int *p = (int*)malloc();
_CrtDumpMemoryLeaks();//退出前检查一下内存泄露情况
return ;
}

①内存泄露的位置,双击到达相关代码。
②内存的类型,可以为normal, client, crt。
③泄露内存大小,这里泄露了100。
注意:利用new的分配内存,定义下面的宏,以便显示内存泄露的具体位置。
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG
例2:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h> #ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG int main()
{
//程序退出前检查内存泄露。
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
int *p = new int();
return ;
}
二、在分配内存序号下断点

1、在程序的开头设置断点,然后f5运行程序。
2、在程序中断的时候,打开监视窗口。
3、如果运行库是/MDd输入_crtBreakaAlloc。否则是/MTd输入{,,msvcr90d.dll}_crtBreakAlloc(vs2010是{,,msvcr100d.dll}_crtBreakAlloc其他版本类推),
默认没下断点是-1,这里我们修改,设置在分配序号52内存块下断点(记得回车,变红色才是修改成功)。
4、继续运行,下断成功。

参考资料:http://msdn.microsoft.com/en-us/library/x98tx3cf%28v=vs.90%29.aspx
C++内存泄露调试的更多相关文章
- android内存泄露调试,Heap,MAT
三.内存监测工具 DDMS --> Heap 无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中 ...
- Android内存泄露调试
Android 内存泄漏调试 一.概述 如果我们编写的代码当中有太多的对内存使用不当的地方,难免会使得我们的设备运行缓慢,甚至是死机.为了能够使得 Android 应用程序安全且快速的运行, Andr ...
- iOS_SN_Xcode内存泄露调试
用Xcode进行内存调试有两种方法: 1.静态方法 2.动态方法 静态方法是直接在Xcode的菜单栏中选择product-->analyze 如截图所示. 之后会看到Xcode的编译状态上会有如 ...
- 转:Android开发:使用DDMS Heap进行内存泄露调试
无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方.Android tools中的DDMS就带有一个很不错的内存监测工具Heap,本 ...
- android 内存泄露调试
一.概述 1 二.Android(Java)中常见的容易引起内存泄漏的不良代码 1 (一) 查询数据库没有关闭游标 2 (二) 构造Adapter时,没有使用缓存的 convertView 3 (三) ...
- Visual Studio内存泄露检測工具
使用简单介绍 在敲代码的过程中.难免会遇到内存泄露的时候.这个时候假设手工查找内存泄露,不说方法没有通用的,就是真的要自己手工查找也是非常耗时间和精力的.诚然.我们能够借助一些工具,并且我们还 ...
- 记一次内存泄漏调试(memory leak)-Driver Monkey
Author:DriverMonkey Mail:bookworepeng@Hotmail.com Phone:13410905075 QQ:196568501 硬件环境:AM335X 软件环境:li ...
- 排查python内存泄露中几个工具的使用
本文主要介绍3个工具:pdb,objgraph,以及pympler. 1.pdb pdb是专门用于python代码调试,模仿gdb. 使用pdb可以查看堆栈,打印变量等. 这里介绍的是命令行下的pdb ...
- Android学习系列(37)--App调试内存泄露之Context篇(下)
接着<Android学习系列(36)--App调试内存泄露之Context篇(上)>继续分析. 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用AsyncT ...
随机推荐
- Linux 命令 - uniq: 通知或忽略重复行
给定一个已排好序的文件,uniq 会删除重复行并将结果输出到标准输出中.uniq 通常与 sort 结合使用以删除 sort 输出内容中的重复行. 命令格式 uniq [OPTION]... [INP ...
- MySql索引的优缺点
优点 有了索引.对于记录数量很多的表,可以提高查询速度. 缺点 索引是占用空间的. 索引会影响update insert delete速度 ALERT!!! 1.索引要创建在where和join用到的 ...
- form提交数据中文乱码问题总结
一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个 ...
- DOS批处理命令-CMD命令
CMD命令是重新开始一个命令解析器的实例.当然,他的功能并不止这么简单. Windows コマンド インタープリターの新しいインスタンスを開始します. 语法结构 CMD [/A | /U] [/Q] ...
- Session id实现通过Cookie来传输方法及代码参考
1. Web中的Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.因此从上述的定义中我们可以看到,Session实际上是一个特定的 ...
- 删除织梦所有待审核稿件sql语句
先提醒一下 archives是dedecms主表addonarticle 新闻信息表 在dede后台"系统->SQL命令行工具"运行下以命令即可(注意,运行后未审核的数据全被 ...
- SOA 的基本概念及设计原则浅议
SOA是英文词语"Service Oriented Architecture"的缩写,中文有多种翻译,如"面向服务的体系结构"."以服务为中心的体系结 ...
- 在ASP.NET中实现压缩多个文件为.zip文件,实现批量下载功能 (转载并优化处理篇)
转自:http://blog.csdn.net/yanlele424/article/details/6895986 这段时间一直在做一个网站,其中遇到了一个问题,就是在服务器端压缩多个服务器端的文件 ...
- 04_例子讲解:rlViewDemo.exe
参考资料:http://www.roboticslibrary.org/tutorials/first-steps-windows 使用rlViewDemo对应的快捷方式启动程序,可以看到如下界面: ...
- PHP 测试程序运行时间 microtime函数用法
PHP microtime() 函数PHP Date / Time 函数定义和用法microtime() 函数返回当前 Unix 时间戳和微秒数.语法microtime(get_as_float)参数 ...