TMyClass = class
    m_boUse   : Boolean;
  private  public  end;
引用的时候 MyClass:TMyClass;if MyClass <> nil then begin
  if MyClass.m_boUse then begin  //偶尔情况下,这里报内存错误了。  end;
end;如下类型的错误
Access violation at address 005C364A in module 'dddd.exe'. Read of address 83EC031A

解决方案 »

  1.   

    应该是访问了无效的对象地址,MyClass对象如何创建和销毁的,上完整点的代码。
    销毁对象用freeandnil(MyClass),或者判断对象用 if assigned(MyClass) then ...
      

  2.   


    if assigned(MyClass) then 用来判断确实比 if MyClass <> nil then效率高  但这不是问题所在
    assigned判断对象是否存在  有时是不行的
    声明一个全局对象时Delphi会自动将其指向nil,声明一个局部对象时Delphi会将其指向一个随机的地址而不是nil,当销毁一个对象时Delphi不会自动对对象标识符做什么,原来指哪里销毁后还是指哪里。
      

  3.   

    嗯,用freeandnil(MyClass),if MyClass <> nil 就不会有问题了
      

  4.   

    感谢大家,追问一下,可以将所有的 TStringList,Class,TList等对象的Free改成FreeAndNil吗?
      

  5.   

    可以,这也是delphi推荐的做法