função com retorno de um TStringList
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:
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.
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
Curtidas 0
Respostas
Massuda
27/11/2007
Seria melhor não retornar o TstringList, mas fazer algo assim......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.
procedure FazAlgumaCoisa(ALista: TStringList); begin ... end;
GOSTEI 0
Lab
27/11/2007
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?
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?
GOSTEI 0
Massuda
27/11/2007
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.GOSTEI 0