Record e TList

13/01/2006

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


E uma TList
Public
Clientes: TList;
...
Clientes: TList.Create


Para adcionar
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
function CliDados(id: Integer): PCliente;
begin
Result:= PCliente(Clientes[id&93;);
end;


O problema é que quando vou pegar os dados ele da erro:
[b:8b63034699]Access violation at address 004041A4[/b:8b63034699]

O que pode ser??

O que eu fiz de errado??


Rudá

Respostas

13/01/2006

Marcelo Saviski

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)

var
  I: Integer;
begin
  for I := 0 to Pred(Clientes.Count) do
    Dispose(Clientes[I&93;);
  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.


Responder Citar

13/01/2006

Rudá

Valeu cara muito obrigado!


Responder Citar