MDI同时开出多个子窗口,关闭时出现Access Violation问题是怎么回事?(200分)

  • 主题发起人 主题发起人 julian
  • 开始时间 开始时间
J

julian

Unregistered / Unconfirmed
GUEST, unregistred user!
我在开发一个MDI应用时,当同时开出的子窗口大于或等于三个时,然后再释放,
会出现Access Violation问题,告诉我访问了内存非法地址.利用F7跟踪之后,
直到FormClose执行到End时,当Delphi释放子窗体资源时出现上述错误,不知
是什么原因,请高手指教.(我用的是Delphi 4.0+数据库相关应用)
 
请问你是否用了第三方控件,会出现此种现象,在关闭系统时出现错误,例如lmd控件
如果是请在工程文件最后加上 三方控件.free;
如果不是,那就是你的程序有问题了,请贴出来看看
 
程序是使用了墙纸,但是,我把墙纸去掉之后,如果重复开关子窗口多次,同样
会出现上述问题.
 
仔细检查FormCloseQuery事件吧,可能是未关闭的窗体的FormCloseQuery事件中使用
到已经关闭的窗体的函数/过程.

以前我也有过这种情况.
 
Access Violation ...错误多数时候是调用某个不存在的对象(或已经释放了的对象)
时候出现。检查一下Close的时候是否调用了某个对象,或者程序的某个部分还在访问
该对象。
 
julian:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
important notice: must not to reference mdi child form by it's name.
it's very dangours.

for example:

MDI Child Form Name: MyMdiForm

in code do not use like following:

MyMdiForm.Free
or
MyMdiForm.---(any other)

you should use like that

MDIChildren.---
 
一般是自己编程的问题,可能看了源码后容易诊断.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部