偶尔出现的access violation错误,MDI主窗体有2个菜单按钮打开子窗口时偶尔出现,完全是随机性,
单步调试的时候不会出现错误(我试过几百次,都没错误)
某个错误的按钮代码:
procedure TMainForm.N48Click(Sender: TObject);
begin
    if not Assigned(Data_xz_Form) then
      Data_xz_Form:=TData_xz_Form.Create(Application);
end;

解决方案 »

  1.   

    既然用到 Assigned 作判断,那么判断的对像在释放时,用FreeAndNil(Data_xz_Form),或者在 Data_xz_Form.free;后面加行Data_xz_Form := nil;
      

  2.   

    子窗口  onclose事件里面    action := caFree;
       Data_xz_Form := nil;
      

  3.   


    Data_xz_Form不单单只对象本身,而是指指向对象的地址,因此需要最后要把指针释放。
    否则,释放了对象,指针还没有为空,再次指向的时候就会报告无效地址错误(AV错误)。
      

  4.   

    非常有理,Assigned只能判断当前指针是否为nil,并不能判断Data_xz_Form是否有效,在Delphi中nil指向的地址是为0的,也就是如果Data_xz_Form指向的地址大于0,你释放之后,没有Data_xz_Form := nil,Assigned是判断不出来的。具体可以参考Windows的内存管理。
      

  5.   

    不是这个原因,原来是VCLskin引起的错误,将皮肤按钮选择‘无’就解决了,就不知道具体原因是什么