Fórum função com retorno de um TStringList #349719

27/11/2007

0

Estou tendo um problema com vazamento de memória quando uso uma função que retorna uma TStringList.
Para saber se há ou não vazamento de memória uso o plugin FastMM.
Um exemplo da função seria:

function FazAlgumaCoisa: TStringList;
begin
   result := TStringList.Create;

   //codigo da função
   .
   .
   .

end;


O problema é que está sendo criada uma instância do tipo TStringList na memória e não está sendo liberada. Não posso fazer a liberação dentro da função porque, desta forma, não teria retorno de dados.
Alguém tem uma solução para liberar esta area na memoria.


Lab

Lab

Responder

Posts

27/11/2007

Massuda

Seria melhor não retornar o TstringList, mas fazer algo assim...
procedure FazAlgumaCoisa(ALista: TStringList);
begin
  ...
end;
...assim quem chama FazAlgumaCoisa que deve se virar em criar/destruir a lista. Isso geralmente dificulta aparecerem situações onde a lista é criada e usada mas não é destruída.


Responder

Gostei + 0

27/11/2007

Lab

tudo bem, mas ai, estarei usando um procedimento e não uma função.
Então nunca poderá ser usada uma função que retorne um tipo que aloque memoria e não faça a sua liberação?


Responder

Gostei + 0

27/11/2007

Massuda

Então nunca poderá ser usada uma função que retorne um tipo que aloque memoria e não faça a sua liberação?
Não foi isso que eu escrevi... apenas é mais fácil de perceber que esqueceu um objeto para trás sem destruir se passar como argumento a lista ao invés de criar a lista dentro da função/procedure e deixar para quem chamou a responsabilidade de destruir (ou não) a lista.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar