Memory Leak ou vazamento de memória
Como saber se eu fui bastante inteligente de ter criado um objeto e esquecido de dar free?
Delphi 2006 é a solução para seus problemas!
Simplesmente no create do form principal adicione a linha:
ReportMemoryLeaksOnShutdown := True;
Que ao fechar o programa, se algum objeto vazou a memória será exibido um ShowMessage com informações sobre isso.
Para testar crie um novo projeto com um form + button. Vamos simular um vazamento de memória, criaremos um TStringList mas não daremos free.
procedure TForm1.Button1Click(Sender: TObject);
var
L: TStringList;
begin
L:= TStringList.Create;
end;
Se rodarmos o projeto e clicarmos no botão, nada acontece ao fechar o form. Agora adicione a seguinte linha ao projeto e repita o processo:
ReportMemoryLeaksOnShutdown := True;
Ao fechar o form é exibida uma ShowMessage com as seguintes informações:
Unexpected Memory Leak
An unexpected memory leak has occurred. The unexpected small block leaks are:
53 - 60 bytes: TStringList x 1
Percebeu? ele indica que o problema é um StringList. (1 unidade).