Mega Code Archive

 
Categories / Delphi / Ide Indy
 

Memory Leak Notification in Delphi Report Memory Leak on Program Exit

Title: Memory Leak Notification in Delphi - Report Memory Leak on Program Exit All Delphi versions since Delphi 2006 have an updated memory manager that is faster and more feature rich. One of the nicest features of the "new" memory manager allows applications to register (and unregister) expected memory leaks, and optionally report unexpected memory leaks on program shutdown. When creating WIN32 applications with Delphi it is imperative to make sure that you free all the objects (memory) you create dynamically. A memory (or resource) leak occurs when the program loses the ability to free the memory it consumes. ReportMemoryLeaksOnShutdown Memory leak detecting and reporting is set to false by default. To enable it, you need to set the global variable ReportMemoryLeaksOnShutdown to TRUE. When the applications is closed, if there are unexpected memory leaks the application will display the "Unexpected Memory Leak" dialog box. The best place for the ReportMemoryLeaksOnShutdown would be in the program's source code (dpr) file. begin ReportMemoryLeaksOnShutdown := DebugHook 0; //source "by" Delphi Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TMainForm, MainForm) ; Application.Run; end. Note: a global variable DebugHook is used above to make sure memory leaks are displayed when the application is run in debug mode - when you fit F9 from the Delphi IDE. Test Drive: Memory Leak Detection Having ReportMemoryLeaksOnShutdown set to TRUE, add the following code in the main form's OnCreate event handler. var sl : TStringList; begin sl := TStringList.Create; sl.Add('Memory leak!') ; end; Run the application in debug mode, exit the application - you should see the memory leak dialog box. Note: If you are looking for a tool to catch your Delphi application errors such as memory corruption, memory leaks, memory allocation errors, variable initialization errors, variable definition conflicts, pointer errors ... take a look at EurekaLog