vc++ 程序内存泄漏的排查

今天刚学习的,怎样快速准确的查看内存泄漏,马上用到项目中~~~~

使用_CrtDumpMemoryLeaks,这个函数在crtdbg.h头文件中,一般vc++程序可以直接引用。CrtDumpMemoryLeaks()是显示当前的内存泄漏。
注意“当前”的意思是说当它执行时,所有未销毁的对象均会报内存泄漏。如果是想查程序有没有内存泄漏的话,尽量把这个函数往后面放;如果是检查某个地方的指针内容是否被完全释放,可以写在这个释放之后~~

当然这个是用在调试模式中,Crt会把前面分配过的内存的文件名和行号以及大小等记录下来,当调用_CrtDumpMemoryLeaks()时,如果还没释放就会打印出来。

结果如下:

Detected memory leaks!

Dumping objects ->

f:\test\memleakchecker\memleakchecker\memleakchecker.cpp(23) : {108} normal block at 0x0003A1A8, 10 bytes long.

Data: < > CD CD CD CD CD CD CD CD CD CD

f:\test\memleakchecker\memleakchecker\memleakchecker.cpp(22) : {107} client block at 0x0003A160, subtype 0, 10 bytes long.

Data: < > CD CD CD CD CD CD CD CD CD CD

f:\test\memleakchecker\memleakchecker\memleakchecker.cpp(21) : {106} client block at 0x0003A120, subtype 0, 1 bytes long.

Data: < > 00

Object dump complete.

很容易看出在哪个位置分配了内存而没有释放掉~

vc++ 程序内存泄漏的排查

时间: 08-19

vc++ 程序内存泄漏的排查的相关文章

C++程序内存泄漏检查

一.在windows平台上面:以前我都是用purify,因为没有正版的,很是麻烦. 后来我开始用windows自带的umdh,也很好用:http://support.microsoft.com/kb/268343/en-us摘要一下步骤如下: 1.准备工作: 1 gflags -i <application name> +ust 注:得先把gflags和umdh的路径加入到Path中,默认为:C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x

Unix下C程序内存泄漏检测工具Valgrind安装与使用

Unix下C程序内存泄漏检测工具Valgrind安装与使用 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 官网 http://www.valgrind.org 下载与安装 #wget http://www.valgrind.org/downlo

Linux下c++程序内存泄漏检测代码范例

Linux下对于程序内存泄漏检测的方法很多,最常用的的莫过于使用valgrind工具.但是valgrind相当于让程序在虚拟机中运行,会带来较大的系统资源开销,还会对程序的运行效率产生较大影响,对于那种资源占用大的程序,如果需要长时间运行才能暴露的泄漏问题,它就显得不太好用. linux下的c++程序中自己实现一个轻量级的泄漏检测代码其实是比较方便的,下面我就给出一个简单的范例,并作简单的说明.当然,我们还是应该提倡使用共享指针,用共享指针自动管理内存可以避免内存泄漏这样的不必要的麻烦. 基本原

Android应用程序内存泄漏介绍

Android应用程序内存泄漏介绍 内存泄漏和内存溢出的区别 内存溢出(out of memory)是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory.比如在我们每个Android程序在运行时系统都会给程序分配一个一定的内存空间,当程序在运行中需要的内存超出这个限制就会报内存溢出(out of memory). 内存泄漏(memory leak)是指程序在申请内存后,无法释放已申请的内存空间.多次内存无法被释放,程序占用的内存会一直增加,直到超过系统的内存限制报内存

C/C++应用程序内存泄漏检查统计方案

一.前绪 C/C++程序给某些程序员的几大印象之一就是内存自己管理容易泄漏容易崩,笔者曾经在一个产品中使用C语言开发维护部分模块,只要产品有内存泄漏和崩溃的问题,就被甩锅“我的程序是C#开发的内存都是托管的,C++那边也没有内存(庇护其好友),肯定是C这边的问题”(话说一个十几年的程序员还停留在语言层面不觉得有点low吗),笔者毕业不到一年,听到此语心里一万头草泥马奔腾而过,默默地修改了程序,注意不是修改bug(哈哈),而是把所有malloc和free都替换成了自定义宏MALLOC和FREE,d

Cocos2d-x Win32中使用Visual Leak Detector (for VC++)检查内存泄漏

Visual Leak Detector(vld,下载地址http://vld.codeplex.com/,当前版本v2.2.3)是VC++环境下一款小巧易用.免费开源的内存泄漏检测工具,相较于VC提供 的CRT Debug Library,vld可以显示导致内存泄漏的完整内存分配调用堆栈.vld具有以下一些特性: 对每个leaked block提供完整的堆栈跟踪,并且包含其源文件及行号信息(符号信息完整时) 能检测出进程内绝大多数类型的leaks,包括COM-based leaks和纯Win3

记一次内存泄漏问题排查

通过MonitoSDK的Sample App进行试用时,发现存在部分内存泄漏的情况,leakcanary直接弹出提示如下 可以看到MonitorDBActivity的instance导致泄漏. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_db); ButterKnife.bind

linux c程序内存泄漏检测工具-mtrace工具介绍

笔者也是最近去面试被问到怎么做内存泄漏检查,之前都是靠人工屏蔽代码.或者PC-link/KW一类的检查工具进行检查,回来后搜索了下,才知道linux自带的就有mtrace工具. 具体操作步骤如下: 1.在linux下创建test.c文件,编写如下代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #include <mcheck.h> 6 7 8 int main(

一个java内存泄漏的排查案例

这是个比较典型的java内存使用问题,定位过程也比较直接,但对新人还是有点参考价值的,所以就纪录了一下. 下面介绍一下在不了解系统代码的情况下,如何一步步分析和定位到具体代码的排查过程 (以便新人参考和自己回顾) 初步的现象 业务系统消费MQ中消息速度变慢,积压了200多万条消息,通过jstat观察到业务系统fullgc比较频繁,到最后干脆OOM了: ? 进一步分析 既然知道了内存使用存在问题,那么就要知道是哪些对象占用了大量内存. 很多人都会想到把堆dump下来再用MAT等工具进行分析,但du