<< Click to Display Table of Contents >> Memory Leaks - Array Dinamicos 2 |
![]() ![]() ![]() |
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