Record e TList
13/01/2006
0
Criei um Record
E uma TList
Para adcionar
Para pegar o dado de um registro
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??
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á
Curtir tópico
+ 0
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)
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.
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
Clique aqui para fazer login e interagir na Comunidade :)