DebugHook 与 ReportMemoryLeaksOnShutdown 都是 System 下的变量.
DebugHook: 程序中母体中运行时, 此值是 1; 独立运行时, 它是 0.
在程序的任何地方加上一句 ReportMemoryLeaksOnShutdown := True;
这样程序在关闭时可检测是否有内存泄漏.
如果这样使用: ReportMemoryLeaksOnShutdown := Boolean(DebugHook);
则程序只会在调试时报内存泄漏.
ReportMemoryLeaksOnShutdown
放置ReportMemoryLeaksOnShutdown的最佳位置是程序的dpr文件中,例如:
begin ReportMemoryLeaksOnShutdown := DebugHook <> 0; //source "by" Delphi Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TMainForm, MainForm) ; Application.Run; end.
使用全局变量DebugHook的作用是确保程序在debug模式运行时显示内存泄露报告。但是注意在正常模式运行是不会报错的。
Test Drive: Memory Leak Detection
var sl : TStringList; begin sl := TStringList.Create; sl.Add('Memory leak!') ; end;

上述代码就是实际测试内存泄露报告效果。
避免这种内存泄露的发生就是使用free方法,用nil不能释放内存。
--------------------------------------------------------------------------------------------------------------------
最终我总结用和上面的方法结合:
begin {还更容易理解,加在程序的工程处,不用每个单元都引用了} ReportMemoryLeaksOnShutdown := Boolean(DebugHook); Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.Run; end.
补充:用了上面的代码之后,调试程序出来一个警告

本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/archive/2013/04/22/3034963.html
浙公网安备 33010602011771号