原因很简单例如你另一个位置要调用ModalForm的时候
可以这样
  if ModalForm <> nil then
    ModalForm := TModalForm.Create(nil)
  ModalForm.Show;如果没有 Modalform := nil;以上语句中
    ModalForm := TModalForm.Create(nil)不会运行
那么实际上ModalForm已经释放,但是ModalForm引用的对象地址还在(虽然是无效地址)
所以在ModalForm.Show的时候就会出错了!!!

解决方案 »

  1.   

    不是必须的,但是推荐使用的。Free后只是将那块内存置为释放状态,
    内容并没有被清空,何时被覆盖取决于操作系统的操作。就是说可能对这个指针的操作还是有效的,非常不确定
    如果你的代码引用了这块内存,他可能出错,但也可能不出错!加一个nil可以手工将这个指针置为空,这样就没有办法再操作这块内存,
    可以保证不会出问题。另外两个函数可以参考:
    Assigned()
    FreeAndNil()
      

  2.   

    if ModalForm <> nil then不建议这样做,建议使用Assigned()。
      

  3.   

    建议使用Modalform:=nil
    因为:
         如果程序用了if Assigned(Modalform)而关闭时没有Modalform:=nil
    那么要出错,内存置为释放状态,内容并没有被清空。