A função Assigned() testa se um determinado ponteiro ou variável procedural tem 
o valor nil. Vale ressaltar que, em essência, uma instância de objeto também é 
um ponteiro. Fazer este teste não garante que aquela instância ou ponteiro não 
esteja apontando para local algum. Ou seja, vc pode estar fazendo um 
fRelBasic.Free para desalocar o objeto da memória, mas depois vc está 
garantindo que fRelBasic receba um valor nil para indicar que, além de 
liberado, a instância aponta para lugar algum?

Deduzo pelo nome da instância que vc deve estar fazendo algum tipo de chamada 
genérica para um relatório. Sendo assim, minha sugestão de código pra vc seria 
a seguinte:

if Assigned(fRelBasic) then
begin
  fRelBasic.Free;
  fRelBasic := nil;
end;

Ou ainda,

if Assigned(fRelBasic) then
  FreeAndNil(fRelBasic);

Esta última sugestão, além de desalocar a instância, atribui o valor nil à 
mesma.

Boa sorte.
Sds.


_______________________________
To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Mon, 20 Oct 2008 13:45:31 -0300
Subject: [delphi-br] Pode dar um erro no Free sendo precedido de um Assigned??

Amigos, tenho o seguinte codigo;

if Assigned(fRelBasic) then
fRelBasic.Free;

As vezes, sim as vezes... abre uma Violação de Acesso no fRelBasic.Free e
realmente existe o form, pois eu o vejo... e não tem codigo nenhum no
OnDestroy desse Form... de qualquer forma, o Assigned lá em cima dele, não
previne de entrar no Free caso ele não esteja na memória? Ou não!?

[]s

--
_________________________________
T.·.F.·.A.·.
Fellipe Henrique

_________________________________________________________________
Confira vídeos com notícias do NY Times, gols direto do Lance, videocassetadas 
e muito mais no MSN Video!
http://video.msn.com/?mkt=pt-br

Responder a