if Assigned(FXMLDoc) then FreeAndNil(FXMLDoc);
出现 Einvalidpointer with message "invalid pointeer operation" 异常
这是为什么?

解决方案 »

  1.   

    var
      FXMLDoc: TXMLDocument;
    begin
      FXMLDoc := TXMLDocument.create(application);
      FXMLDoc.Free 
    end;
    不会出错
      

  2.   

    TControlForm = class(TForm)
    private
      FXMLdoc: TXMLDocument;
    protected
      procedure FormInitialize; virtual;
    public
      destructor Destroy; override;
    end;TControlForm.FormInitialize
    begin
      FXMLdoc: TXMLDocument.Create(Application);
    endTControlForm.Destroy
    begin
      FXMLdoc.Free;
    end;TBillControlForm = class(TControlform)
    end;
     
    var
      billControlForm: TBillControlForm procedure Test;
    begin 
      billControlForm := TBillControlForm.Create(Applcation)
      billControlForm.FormInitialize;
      billControlForm.Free;
    end;
    运行到   FXMLdoc.Free; 就出错
    如果改成
    TControlForm.Destroy
    var
      aXMLdoc: TXMLDocument;
    begin
      aXMLdoc := TXMLDocument.Create(Application);
      aFXMLdoc.Free; 则不出错
    end;
      

  3.   

    if Assigned(FXMLDoc) then FreeAndNil(FXMLDoc);Einvalidpointer with message "invalid pointeer operation" 异常因为"Assigned"函数不是准确的确定,所以当FXMLDoc指向的对象已被释放,而FXMLDoc却依然存在,当用
    FreeAndNil去释放时就出错了.....