我的DELPHI程序在退出时报错:Runtime error 216 at 00004d29.在win2K下会出错误,98下会死机。(300分)

  • 主题发起人 主题发起人 wumeng
  • 开始时间 开始时间
W

wumeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我也查了以前的贴子,但我的程序中没有使用DLL和HOOK等技术,只是窗体多了点。有100多
个。但这些窗体只有10个左右是自动创建的,其它的是用的时候才创建。
不知道有没有人遇到过这个情况。
我和程序在运行时没有错误,内存检测工具也没有报漏洞,只是在运行结束,退出进才出
这个错误。。。
 
建议在内存大些且关闭所有驻留程序的环境下运行一下,如果还有问题,说明你的程序有问题,
如果没问题就说明你的程序需要优化.
 
我现在是256M的内存,运行时是关闭了其它的程序。。。
我也觉得是程序的问题,但我不知道问题在哪。我上BORLAND的网战上看了,说是有
Runtime error 216 at ShutDown 的错误,但我没查到应该怎么解决。
 
一般来说报Runtime Error的都是由于内存泄露的问题
你确信没有内存泄露吗?是用什么工具检测的?
另外,你试试看是作了什么操作后才报错的
总不会是启动完应用后直接关闭都会报这个错吧?
如果是这样,你把自动创建的窗体一个个去掉,看是因为创建了哪个窗体导致这个错误
只能一步步地缩小范围。
 
创建的对象或指针没有释放!
 
聽說delphi6的內存管理有問題.
 
是否引用了ShareMem。呵呵,如果有DLL调用,如果有的用了ShareMem,有的没有的话,
就有可能出现这样的问题。
 
>>你确信没有内存泄露吗?是用什么工具检测的?
memProof和BoundsChecker都用过了,只创建一个主窗体就会出上面的错误。但其它的程序
不会出这个错误。

我没有用ShareMem。也没有DLL调用。
 
你跟踪一下程序退出的过程
 
>>你跟踪一下程序退出的过程
如果在DELPHI的环境下,它是执行完END这句才报错误的。也就是说,DELPHI追踪不进去。
我不知道还有没有其它的追踪工具。
 
>>只创建一个主窗体就会出上面的错误
这样的话范围就缩小很多了,可以通过增加删除控件的办法来试验
看看是不是由于某个控件引起的
如果不是控件,那就看看是执行哪段代码后退出才会引起这样的错误!
这是通过排除法找到引起出错的代码
要相信这肯定是你自己的代码有问题,最后才怀疑到Delphi本身[:D]
 
end之后还有很多代码呢。
 
begin
Application.Initialize;
Application.CreateForm(TfrmQc, frmQc);
Application.Run;
end.//-->是这个END之后才报告以上的错误。。。
// 所以我才追踪不进去呀。。。
 
你是不是加了很多图片呢?
 
只有一个74K的JPG图片。
 
用f7 跟踪
 
Runtime error 216错误是SysUtils的finalization执行之后才会报告的,所以你尽量让
SysUtils在工程的最前面,即
program 程序名;

uses
SysUtils,//第一个引用,看能不能把216错误转换过来
如果还不能转换过来,很有可能程序有内存泄漏。
当然还有可能你用了API向系统调用了什么资源,最后没有释放,或引用了DLL,最后没有
正确结束之类的原因,要仔细查了。
 
这种情况一般是资源没有释放,或是有的线程没有退出。
你可以把可疑的部分逐个从你的项目中移出,逐个判断。
 
可能对同一个窗体释放多次
 
后退
顶部