教程-在Delphi中怎么查看是否有内存泄漏(Delphi2007)+WIN7

相关资料:
1.http://bbs.csdn.net/topics/390630932?page=1

PS:
1.本实例D2007及以上版本支持。
2.检测内存工具 EurekaLog fastmm

实例代码:
Project1.dpr:

 1 program Project1;
 2
 3 uses
 4   Forms,
 5   Unit1 in ‘Unit1.pas‘ {Form1};
 6
 7 {$R *.res}
 8
 9 begin
10   Application.Initialize;
11   ReportMemoryLeaksOnShutdown := True; //加入该行,在程序运行并关闭后会提示你什么对象在哪里泄露了
12   Application.MainFormOnTaskbar := True;
13   Application.CreateForm(TForm1, Form1);
14   Application.Run;
15 end.

Unit1.pas:

 1 unit Unit1;
 2
 3 interface
 4
 5 uses
 6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 7   Dialogs, StdCtrls;
 8
 9 type
10   TForm1 = class(TForm)
11     Button1: TButton;
12     procedure Button1Click(Sender: TObject);
13   private
14     { Private declarations }
15   public
16     { Public declarations }
17   end;
18
19 var
20   Form1: TForm1;
21
22 implementation
23
24 {$R *.dfm}
25
26 procedure TForm1.Button1Click(Sender: TObject);
27 var
28   oForm2: TForm1;
29 begin
30   oForm2 := TForm1.Create(nil);
31   try
32   finally
33     //oForm2.Free;
34   end;
35 end;
36
37 end.

运行效果:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

1 - 12 bytes: Unknown x 3

13 - 20 bytes: TList x 4, String x 2, Unknown x 3

21 - 28 bytes: TIconImage x 1, TPen x 1, TBrush x 3

29 - 36 bytes: TPadding x 2, TMargins x 2, TSizeConstraints x 2, TFont x 3, Unknown x 2

37 - 44 bytes: TGlassFrame x 1

45 - 52 bytes: TIcon x 1

61 - 68 bytes: Unknown x 1

69 - 76 bytes: TControlScrollBar x 2

93 - 100 bytes: TControlCanvas x 1

573 - 620 bytes: TButton x 1

797 - 876 bytes: TForm1 x 1

---------------------------
确定
---------------------------

时间: 2024-08-09 19:07:05

教程-在Delphi中怎么查看是否有内存泄漏(Delphi2007)+WIN7的相关文章

golang中省略返回值造成内存泄漏

我已经两次因为不恰当的省略go中的函数返回值,一次造成MySql的too many connection错误,一次造成严重的内存泄漏.所以在这里大家分享一下这个问题和解决办法,也提醒自己以后不要再犯类似的错了. 众所周知,go中的函数可以返回多个值.但很多时候我们并不需要所有的值,而且go中定义了一个变量必须使用才可以,不然会报错.所以对于不需要的返回值,一般的操作方法就是省略: for _,value := range slice{ //.... } 一个典型就是上面的range.range可

在Activity中使用Thread导致的内存泄漏

原文链接 : Activitys, Threads, & Memory Leaks 原文作者 : AlexLockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: yinna317 状态 : 完成 注:这篇博文涉及的源码可以在 GitHub 上面下载哦 做 Android 开发最常遇到的问题就是在 Activity 的生命周期中协调耗时任务,避免执行任务导致不易察觉的内存泄漏.不妨先读一读下面的代码,代码写了一个简单的 Activity,Act

前端开发中javascript闭包会引发内存泄漏么?

本文主要是和大家一起来讨论下javascript的闭包会造成内存泄漏吗?希望通过本文的分享对大家学习javascript有所帮助.  在谈内存泄漏这个问题之前先看看JavaScript的垃圾收集机制,JavaScript 具有自动垃圾收集机制,就是找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间).常用的的方法有两种,即标记清楚和引用计数.  标记清除  JavaScript 中最常用的垃圾收集方式是标记清除(mark-and-s

JS中4种常见的内存泄漏

一.什么是内存泄漏 本质上讲,内存泄漏是当一块内存不再被应用程序使用的时候,由于某种原因,这块内存没有返还给操作系统或空闲内存池的现象. 二.几种常见的内存泄漏 1.意外的全局变量 一个未声明变量的引用会在全局对象中创建一个新的变量.在浏览器的环境下,全局对象就是window,也就是说: function foo(arg) { bar = "this is a hidden global variable"; } 实际上是: function foo(arg) { window.bar

block块中引用成员变量引起内存泄漏问题

使用block要注意循环引用,因此在块中使用self前先使用__weak修饰生产弱引用 这里记录另一种情况:没有使用属性而是直接使用成员变量的时候 // 私有成员变量 @implementation SmartInfoViewController { UIColor *lightColor; } // 在块中直接使用lightColor会造成retain cycle self.colBlock = ^(UIColor *col) { lightColor = col; // 等价于 self->

了解 JavaScript 应用程序中的内存泄漏

简介 当处理 JavaScript 这样的脚本语言时,很容易忘记每个对象.类.字符串.数字和方法都需要分配和保留内存.语言和运行时的垃圾回收器隐藏了内存分配和释放的具体细节. 许多功能无需考虑内存管理即可实现,但却忽略了它可能在程序中带来重大的问题.不当清理的对象可能会存在比预期要长得多的时间.这些对象继续响应事件和消耗资源.它们可强制浏览器从一个虚拟磁盘驱动器分配内存页,这显著影响了计算机的速度(在极端的情形中,会导致浏览器崩溃). 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在.在最近几

Java中如何防止内存泄漏的发生

在Java开发中我们常常会遇到内存泄漏的情况发生.那么为什么会发生内存泄漏,以及怎样去防止! 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 为什么会发生内存泄漏.下面这个例子中,A对象引用B对象,A对象的生命周期(t1-t4)比B对象的生命周期(t2-t3)长的多.当B对象没有被应用程序使用之后,A对象仍然在引用着B对象.这样,垃圾回收器就没办法将B对象从内存中移除,从而导致内存问题,因为如果A引用更多这样的对象,那将有更多的未被引用对象存在,并消

String中substring方法内存泄漏问题

众所周知,JDK中以前String类中的substring方法存在内存泄漏问题,之所以说是以前,是因为JDK1.7及以后的版本已经修复了,我看都说JDK1.6的版本也存在这个问题,但是我本机上安装的1.6看了看源码不存在内存泄漏问题啊,又看了1.7的源码,和我本机的1.6的一样,是不是我的1.6版版其实是1.7的?!唉,不管了,反正1.7版本肯定没有这个问题(1.5及更老版本肯定有)了,大家就放心的用吧. 之所以存在内存泄漏的问题,是因为原先的版本中,substring是这样实现的: publi

VS环境中进行内存泄漏的检测

根据MSDN中的介绍,亲测整理. 本篇比较长,如不愿花费太多时间,可只看第一段和第四段,甚至只看第四段. 内存泄漏,即未能正确释放以前分配的内存,是 C/C++ 应用程序中最难以捉摸也最难以检测到的 Bug 之一.借助 Visual Studio 调试器和 C 运行时 (CRT) 库,可以检测和识别内存泄漏.检测内存泄漏的主要工具是调试器和 C 运行库 (CRT) 调试堆函数. 简单的使用 要调用CRT调试堆函数,需包含头文件<crtdbg.h>. 在程序的退出点之前调用函数 _CrtDump