Hola.
Tengo este algoritmo (resumido) con un par de objetos Datos y Campo, que genera una lista de datos. El problema esta en que no consigo liberar toda la memoria que utilizo cuando finaliza. Es recursivo, los datos del nivel siguiente dependen del anterior y finalizo cuando el nivel es cero. Libero las listas y objetos con FreeAndNil o Free, pero veo en los recursos de Windows que la memoria no se libera. Solo cuando cierro la aplicacion dentro del IDE se libera la memoria. ¿Alguien podria indicarme que hago mal, que me falta para liberar la memoria? Uso Delphi 2005 Personal Edition y no domino mucho los objetos.
Muchisimas gracias.
Código Delphi
[-]
typeTDatos = class
private Datos1,Datos2: integer;
public function GenDatos(Datos: integer): boolean;
TCampo = class
public Campo1,Campo2: integer;
procedure GenerarCampo(estado: string)
procedure GenerarListaDatos(ListaDatos: TObjectList);
varCampo: TCampo;
procedure TCampo.GenerarListaDatos(ListaDatos: TObjectList);
varDatos: TDatos;
i: integer;
beginfor i:=0 to 10 do beginDatos:=TDatos.Create;
Datos.GenDatos(i);
ListaDatos.Add(Datos);
end;
end;
procedure CopiarDatos(Original,Copia: TCampo);
beginCopia.Datos1:=Original.Datos1;
Copia.Datos2:=Original.Datos2;
end;
procedure TfrmFormulario.CalculoCampos(nivel: integer);
varCopiaCampo: TCampo;
ListaCampos: TObjectList;
i: integer;
beginif nivel=0 then exit;
CopiaCampo:=TCampo.Create;
CopiarDatos(Campo,CopiaCampo);
ListaCampos:=TObjectList.Create(TRUE);
Campo.GenerarListaDatos(ListaCampos);
for i:=0 to pred(ListaCampos.Count) do beginCampo.CambiarDatos(TCampo(ListaCampos[i]));
CalculoCampos(nivel-1);
CopiarDatos(CopiaCampo,Campo)
end;
//FreeAndNil(CopiaCampo);
//FreeAndNil(ListaCampos);
CopiaCampo.Free;
ListaCampos.Free;
end;
procedure TfrmFormulario.btnCalcularNodosClick(Sender: TObject);
varCopiaCampo: TCampo;
ListaDatos: TObjectList;
i: integer;
beginCampo:=TCampo.Create;
CopiaCampo:=TCampo.Create;
Campo.GenerarDatos(estado);
CopiarDatos(Campo,CopiaCampo);
ListaDatos:=TObjectList.Create(TRUE);
Campo.GenerarListaDatos(ListaDatos);
for i:=0 to pred(ListaDatos.Count) do beginCampo.CambiarDatos(TCampo(ListaDatos[i]));
CalculoCampos(strtoint(txtNivel.text));
CopiarDatos(CopiaCampo,Campo);
end;
FreeAndNil(CopiaCampo);
FreeAndNil(Campo);
FreeAndNil(ListaCampos);
//CopiaCampo.Free;
//Campo.Free;
end;