在应用程序按预期关闭大约3到5秒后,我收到此AV消息:
00073225处模块rtl160.bpl中的异常EAccessViolation。模块'rtl160.bpl‘中地址500A3225的访问冲突。读取地址00000004。
这些(20)应用程序非常相似,因为它们都是IBX业务应用程序。其中大约一半没有引起房室颤动的发生。
这些应用程序是从Delphi-xe移植过来的,它们在很长一段时间内都能完美地工作。港口中的项目没有任何变化。32位和64位构建给出了相同的结果。
这是不是某个库的终结区释放资源或其他东西的bug?
我使用的是Delphi-XE2 Update 3。
会很感谢你的帮助。
发布于 2012-03-09 05:28:20
尝试使用madExcept / EurekaLog等--它们会给你在AV上的详细堆栈跟踪。这并不总是灵丹妙药,但可以为您指出问题所在。
发布于 2012-06-07 03:01:51
访问冲突本质上已经很麻烦了,因为它们处理内存中的无效指针。在应用程序关闭一段时间后发生的情况甚至更糟,因为此时您的应用程序处于“清理”模式。您可能正在处理应用程序中较早出现错误的情况,但只在关闭时暴露出来。
一般提示:
的连接
即使在关机前确保您已经完成了上述所有操作,也可以帮助tremendously.
之前,
的相反顺序来完成单元你不想让ComObj完成
块
- eventually your code base will be small enough to pinpoint likely problems which can be tackled with targeted testing.
发布于 2017-06-21 19:35:33
在以前的Delphi或C++Builder项目中,我有时会遇到这种访问冲突问题。今天我和C++Builder在一起。在崩溃时,通过查看Debug Stack窗口,我可以看到它是在__exit_streams和_exit调用的->调用中发生的。
我不确定是什么导致了它,因为它在Borland库代码中太深了,但当代码发生变化时,它似乎是随机出现和消失的。这似乎在多表单应用程序中更为常见。
这一次,当我在主窗体上添加了一个新的按钮时,这个错误就消失了。按钮就在那里,没有事件处理程序,也不做任何事情。我认为,在重新链接应用程序时,对代码、类、变量等的任何随机更改都会重新排列内存布局,并且会触发或取消触发错误。
现在,我只是将新按钮留在表单上,将其设置为“不可见”,这样就没有可见的更改。由于它似乎工作,这是足够好的解决方案,我在这个时候。
https://stackoverflow.com/questions/9352569
复制相似问题