Array
(
)

Record e TList

Rudá
   - 13 jan 2006

Criei um Record
#Código

PCliente = ^TCliente;
TCliente = record
Nome: String;
Senha: String;
Status: Integer;
end;


E uma TList
#Código
Public
Clientes: TList;
...
Clientes: TList.Create


Para adcionar
#Código
var Cli: PCliente;
begin
New(Cli);
Cli^.Nome:= Nome;
Cli^.Senha:= Senha;
Cli^.Status:= Status;
Clientes.Add(Cli);
Dispose(Cli);


Para pegar o dado de um registro
#Código
function CliDados(id: Integer): PCliente;
begin
Result:= PCliente(Clientes[id]);
end;


O problema é que quando vou pegar os dados ele da erro:
Access violation at address 004041A4

O que pode ser??

O que eu fiz de errado??


Marcelo Saviski
   - 13 jan 2006

vc tem que tirar o Dispose(Cli);

tem que ambém destruit a lista Clientes, digamos no evento on Destroy do form.

ai sim, quando vc estiver destruindo a lista, vc chama o Dispose.

Assim: (para destrir a lista e liberar os registros)

#Código

var
I: Integer;
begin
for I := 0 to Pred(Clientes.Count) do
Dispose(Clientes[I]);
FreeAndNil(Clientes);
end;


O erro estava ocorrendo por que vc estava tentando acessar um registro que havia sido liberado (com o Dispose), a solução é vc liberar os registros só depois que tiver certeza que não irá mais usálos.


Rudá
   - 13 jan 2006

Valeu cara muito obrigado!