Yo para cazar los "Memory Leaks" utilizo la unidad MemCheck.
La puedes bajar de
aquí.
Básicamente debes ponerla dentro de tu proyecto, como primera unidad.
Lo primero que debe hacer tu aplicación es llamar a MemChk.
Código Delphi
[-]
program MiPrograma;
uses
MemCheck in '..\Utilidades\MemCheck.pas',
Forms,
SysUtils,
...;
{$R *.RES}
begin
MemChk;
Application.CreateForm(TDMMain, DMMain);
Application.CreateForm(TFMMain, FMMain);
Application.Run;
end.
Para compilar tu versión de desarrollo debes activar algunos checks en las opciones de compilacion:
Mira
aquí.
No olvides activar la opción TD32 debug information en la pestaña Linker.
Ejecutas el programa y al salir te da información en un texto que debería serte útil para buscar lugares donde no liberas objetos.
Nota: Luego de agregar MemCheck al proyecto y haber tocado las opciones de compilación, deberías borrar todas las *.dcu para recompilar completamente tu proyecto.
Nota 2: Con las opciones de compilacion puestas el .exe es mucho más grande. Solo deberías utilizar estas opciones durante el desarrollo. Antes de entregar al cliente deberías quitar todas las opciones y comentar la línea //MemChk;