Sunday, March 15, 2020

Memory Leak Notification in Delphi on Program Exit

Memory Leak Notification in Delphi 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. Report Memory Leaks on Shutdown Memory leak detecting and reporting are set to false by default. To enable it, you need to set the global variable ReportMemoryLeaksOnShutdown to TRUE. When the application 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 programs 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 forms 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 madExcept and EurekaLog Delphi Tips Navigator Date Time SQL Queries: Formatting Date Time Values for Access SQL in DelphiForce TListViews Edit Mode using a Keyboard Shortcut