Si es el único lugar, tanto if está de mas, es mejor algo como:
Código Delphi
[-]
var
frmX: TfrmX;
begin
frmX := TfrmX.Create(nil);
try
HacerAlgoCon(frmX);
finally
frmX.Free;
end;
end;
Que tiene ventajas:
- Al usar una variable local, se asegura que sea el único lugar del programa donde se tiene acceso a ella, sin efectos colaterales en otros sitios.
- garantiza que el recurso asignado es liberado al usar try/finally
Si sigue dando error, quizás en otro sitio se esté jugando a liberar recursos que pertenecen a dicho formulario, lo que daría problema en su destructor, o quizás el problema se esté dando en un evento que se dispara como parte de la secuencia de destrucción: OnClose, OnDestroy, etc.
Hasta luego.