我在应用程序按预期关闭后大约3到5秒收到此AV消息:
模块rtl160.bpl中的EAccessViolation异常为00073225.模块'rtl160.bpl'中地址为500A3225的访问冲突。读取地址00000004。
这些(20)应用程序非常相似,因为它们是IBX业务应用程序。其中大约一半没有导致AV发生。
这些应用程序是从Delphi-xe移植而来的,并且它们在很长一段时间内都运行良好。没有对港口的项目进行任何更改。 32位和64位构建都给出了相同的结果。
这是某个库的终结部分中的一个错误,是否释放了某个资源?
我正在使用Delphi-XE2 Update 3.
非常感谢帮助。
答案 0 :(得分:3)
答案 1 :(得分:3)
访问违规本质上已经是非常麻烦的野兽,因为它们处理内存中的无效指针。应用程序关闭后发生一段时间的情况甚至更糟,因为当您的应用程序处于“清理”模式时。你可能正在处理应用程序早期出现问题的东西,但只是在关机时暴露自己。
一般提示:
答案 2 :(得分:0)
我在旧的Delphi或C ++ Builder项目中偶尔会遇到这种访问冲突问题。今天我用C ++ Builder了。在崩溃时,通过查看Debug - >调用堆栈窗口,我可以看到它发生在fflush的调用中,由__exit_streams和_exit调用。
我不确定是什么导致它,因为它在Borland库代码中如此之深,但是当代码发生变化时它似乎随机出现。对于多表单应用程序来说似乎更常见。
这次,当我刚刚在主窗体上添加了一个新按钮时,错误就消失了。一个按钮就在那里,没有事件处理程序,也没有做任何事情。我认为,当您重新链接应用程序时,代码,类,变量等的任何随机更改都会重新排列内存布局,并且会触发或触发错误。
现在,我只是在表单上保留新按钮,将其设置为“不可见”,这样就没有明显的变化。因为它似乎有效,所以此时它对我来说已经足够好了。