Como remover vazamentos de memória

Ferramentas como FastMM melhoram o desempenho de aplicações que utilizam muita alocação dinâmica, e de quebra ainda relata se a aplicação está deixando vazamentos de memória.

Agora saber que a aplicação tem vazamento de memória é fácil, no entanto, dependendo do tamanho do projeto, torna-se mais difícil determinar aonde ela foi alocada.

Os passos abaixo ajudam a localizar a criação do objeto (em Delphi). Bom, o problema não é o fato de ele ter sido criado, mas sim de não ter sido destruido. Se este objeto não tem contagem de referência, então o trabalho será bem mais simples.

  • Baixe o MemCheck aqui
  • Coloque-o como a primeira unit do seu .dpr (temporariamente no lugar do seu gerenciador de memória);
  • logo após o begin, coloque uma chamada à procedure MemChk;
  • Em project | options | compiler, ligue o stack frames;
  • Em project | options | linker, ligue o include TD32 debug info;
  • Dê um build all no projeto.

Quando sua aplicação for fechada, o MemChk vai gerar uma exception no ponto em que o projeto aloca memória que não foi desalocada.

Depois de resolver o vazamento, lembre-se de voltar ao seu gerenciador de memória, desabilitar o stack frames e as informações de debug.

Se você tiver outras dicas, deixe-as nos comentários.

2 thoughts on “Como remover vazamentos de memória”

  1. Olá João,

    Eu cheguei a testar um gerenciador do cnpack no Delphi 7, mas ele não chega a ser tão bom quanto o FastMM, e outra, depois que li um email seu sobre a Borland ter adotado o FastMM como gerenciador de memória, pelo menos para o Delphi eu acredito que não vou usar outra ferramenta, o FastMM é completo.

    Abraços,
    Silvio Clécio

  2. Olá João.
    Sou iniciante em Delphi, e estou desenvolvendo um programa pequeno. Estava funcionando muito bem até que começou a mostrar um erro sempre ao fechar o sistema.
    Tenho um formulário principal que chama os demais. Consigo efetuar cadastros, lançamentos e até gerar os relatórios. O problema ocorre quando fecho o formulário principal.
    Fiz o procedimento do “memCheck” e aparece uma caixa com a seguinte mensagem de erro:

    Project Pfc.exe raised exception class EMemoryLeak with message ‘second release of
    block attempt, already freed’. Process stopped. Us Step or Run to continue.

    E depois vai aparecendo várias mensagens de erro.

    Não sei como conferir o resultado do “memCheck”.

    Você pode me dar umas dicas?

Comments are closed.