Record e TList

13/01/2006

0

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]);
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á

Rudá

Responder

Posts

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]);
  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

13/01/2006

Rudá

Valeu cara muito obrigado!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar