windows内存泄漏监测

之前使用vld检测内存泄露,有兴趣可以一观:

http://blog.csdn.net/alex_my/article/details/11488805

控制台下有效,MFC未测试。

使用方法如下:

#include <crtdbg.h>
ifdef _DEBUG
define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
endif

void EnableMemLeakCheck()
{
     _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
}

int main()

{

     EnableMemLeakCheck();

    

     int* p = new int[1024]; 

     return 0;

}

执行完毕之后,会在output窗口显示在哪里new的内存是没有被释放的。

但是在复杂的工程中,常常报出的信息中没有包含行列信息。

这时候需要借助另外一个工具。 _CrtSetBreakAlloc

在EnableMemLeakCheck()之后添加一行:

_CrtSetBreakAlloc(279);

这样,在运行到红框中279处泄漏内存时就会暂停。

在Call Stack中,可以看见,在哪里分配的内存是没有释放的。

可以改变_CrtSetBreakAlloc(long )中的数字,重新编译运行,分别查看各个泄漏点位置。

时间: 2024-10-02 21:17:42

windows内存泄漏监测的相关文章

[翻译] Facebook 的 iOS 内存泄漏监测自动化实践

原文链接 [需翻墙]:Automatic memory leak detection on iOS 内存是移动设备上的共享资源,如果一个 App 无法正确地进行内存管理的话,将会导致内存消耗殆尽,闪退以及性能的严重下降. Facebook 的 iOS 版本的许多功能模块共用了同一份内存空间,如果其中的某一个模块消耗了特别多的内存资源的话,将会对整个 App 造成严重影响.举个栗子,当某个功能模块不小心造成了内存泄漏的时候,这个情况就很有可能会发生. 在 Facebook,我们有非常多的工程师同时

windows 下面的内存泄漏排查.

内存泄漏排查 一下本人只是简单的介绍一个实用, 如果读者很感兴趣, 可以查阅msdn自己去深入调查相关的API和原理. API 介绍 1. 马上打印泄漏信息:_CrtDumpMemoryLeaks(); 一般用于局部跟踪内存泄漏问题,使用的方法很简单,你怀疑在某一个时刻有内存泄漏了,就执行这个函数调用,然后在 vs 调试器的 "output" 窗口会马上会打印出当前所有没有释放的内存的申请明细(包括文件名,行号, 第几次内存分配). 双击就可以定位到源文件 内存申请的地方, 很方便.

Windows平台上C++开发内存泄漏检查方法

 充分的利用调试工具可以非常方便地避免内存泄漏问题.       这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一样的:内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏.其中,第一种方法重载了new操作符,第二种方法是替换了CRT运行时库,在用户程序与运行库之间加了一层,用于记录内存分配情况.两种方法的不同是

如何在linux下检测内存泄漏(转)

  本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题.作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类.   1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式

关于ie的内存泄漏与&amp;#106avascript内存释放

     最近做一个公司的业务系统,公司要求能尽可能的与c/s近似,也就是如c/s一样,点击文本框可以弹出此项目的相关内容,进行选择输入.     我使用了弹出窗口,然后在子窗口双击选中项目,把选中的值返回给父窗体.     在系统做完了之后,在客户使用的过程,由于客户使用的是512m的内存配置,所以在打开了30--40个窗体之后,ie的虚拟内存占用量达到近200m,从而使系统变慢,javascript的运行也变慢了.       在google搜了一下之后,才知道可能是由于ie的内存泄漏引起的

关于ie的内存泄漏与javascript内存释放

javascript      最近做一个公司的业务系统,公司要求能尽可能的与c/s近似,也就是如c/s一样,点击文本框可以弹出此项目的相关内容,进行选择输入.     我使用了弹出窗口,然后在子窗口双击选中项目,把选中的值返回给父窗体.     在系统做完了之后,在客户使用的过程,由于客户使用的是512m的内存配置,所以在打开了30--40个窗体之后,ie的虚拟内存占用量达到近200m,从而使系统变慢,javascript的运行也变慢了.       在google搜了一下之后,才知道可能是由

C++内存泄漏检测拾遗

在MFC开发环境中,当运行退出了,Visual Studio会在输出窗口提示是否有内存泄漏.也可以借助MFC类CMemoryState动态地检测并输出内存泄漏信息. 在非MFC框架中,需要借助CRT函数实现这些功能. 1. 调用_CrtDumpMemoryLeaks()函数会在输出窗口中输出当前的内存泄漏.若在程序开始处加上:_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ): 语句,CRT会在程序的每个出口处自动调用_C

如何在Linux操作系统下检测内存泄漏

1.开发背景: 在 Windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名.行号以及内存大小.该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部. 在 Linux 或者 Unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额.而且程序退出时,我们无法获知任何内存泄漏信息.为了更好的辅助在 lin

Umdhtools.exe: 如何使用 umdh.exe 来查找内存泄漏

使用 UMDH 之前 如果您认为您遇到内存泄漏, 应注意, 内存泄漏可能不它们似乎什么. 您可能发现内存泄漏是不满足内存泄漏, 但是性能增强. 例如, MicrosoftJet 数据库引擎会消耗大量内存因为它检索数据并写入缓存 256 - MB 计算机上 (最多 128 MB). 缓存允许 Jet 引擎以获得快速读和写提前缓冲. 要确定是否是一个进程遇到内存泄漏, 使用 Windows 性能监视器 (Perfmon.exe) 并为应用程序进程类别下监视专用字节. 专用字节是总内存, 进程已分配,