Memory Leaks - Array Dinamicos 2

<< Click to Display Table of Contents >>

Navigation:  Novatos > Mais Dicas Programação Delphi >

Memory Leaks - Array Dinamicos 2

Previous pageReturn to chapter overviewNext page

Pessoal, fiz uma descoberta que nos condena. Estive procurando uma rotina para deletar um item de um array dinamico.

Durante a pesquisa, vendo exemplos na net descobri algo, primeiro veja o codigo abaixo:

type

  reg = record

    Codigo: Integer;

    Nome: string;

  end;

 

var

  vetor: array of reg;

 

begin

   SetLength(vetor, 10);  // aloca 10 espaços (0-9)

   vetor[0].Codigo := 1;

   vetor[0].Nome := 'John Junior Rambo';

   { ... }

   vetor[9].Codigo := 10;

   vetor[9].Nome := 'Chuck Junior Norris';

 

   SetLength(vetor, 3);  // elimina os 7 ultimos itens

end;

 

No exemplo é criado um array dinamico de um record com 10 itens e depois no final do codigo esse array é esvaziado eliminando 7 itens e liberando a memória, certo? ERRADO! o comando SetLength NÃO LIBERA a memória utilizada pelo array dinamico, mesmo quando diminuimos ele.  Mesmo usando SetLenght(vetor, 0).

Para liberar memória temos que usar o comando Finalize Liberar um item da memória:

Finalize(vetor[8]);

 

Para liberar a memória alocada pelo vetor inteiro:

Finalize(vetor);

 

Veja documento do Dr.Bob sobre isso

http://www.drbob42.com/delphi4/dynarray.htm