Código Delphi
[-]
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
como ves se hace al revés ¿Por qué? Porque puede ocurrir alguna excepción al tiempo de liberar el objeto, y entonces no quedaría apuntando a nil, y el peligro sería el mismo.
En cuanto a lo demás, sería mejor que pegaras el código que te da error; ya que tengo mis dudas en eso de usar FormDestroy, ¿no querrás decir FormClose?
De hecho nunca se debe llamar a destroy, siempre se debe usar .Free sencillamente por esto:
Código Delphi
[-]
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
Si primero se usa FreeAndnil, la siguiente llamada a .Free no causará daño alguno.
Si se usa FreeAndNil y despues .Destroy, seguro que casca porque Destroy no comprueba el valor de nil.
Un saludo
Un saludo