forms - 从 XE8 中的 Form Tag 分配给 RadioGroup Tag 会导致访问冲突

标签 forms delphi access-violation delphi-xe8

我最近从 XE4 升级到 XE8,在将 itemindex 分配给单选组时遇到访问冲突。我很好奇为什么在 XE4 中这有效,而在 XE8 中则不行。当主程序启动时,所有表单都已创建。此代码在调试时工作正常,但作为独立运行时会抛出异常。

with TravelBookingForm do begin
   try
      rg1.itemindex:=tag-1;//not sure which causes the access violation
   except
      on E : Exception do
      begin
         showMessage(E.Message); //access violation message is shown
      end;
      rg1.tag := 0;
   end;
end;

注意:我省略了不相关的代码

最佳答案

So after more testing I can confirm that rg1 is not nil and that it is the item causing the access violation.

如果 rg1 不是 nil 并且导致访问冲突,那么最合理的解释是 rg1 指向已被访问的内存。释放了。这与错误有时发生(在调试器外部)而不是其他错误(在调试器下)的观察相匹配。

因此,您的程序会在某个时刻销毁该表单,然后再引用该表单。

显然,这是您的程序中的一个错误,您需要确保在表单被销毁后​​您永远不会引用它们。不幸的是,IDE 鼓励您在启动时一次创建所有表单,并在全局变量中保存引用。这使得很容易出现过时的引用。

如果您使用 FastMM 的完整调试版本,那么当您尝试访问已释放的内存时,该工具将能够向您发出警告。

关于forms - 从 XE8 中的 Form Tag 分配给 RadioGroup Tag 会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30091455/

相关文章:

php - 在 jquery .serialize() 之后如何处理 php

forms - Orchard CMS 在使用工作流程提交表单后将电子邮件发送到多个/不同的电子邮件地址

c++ - 负数组索引

c++ - 函数访问冲突读取位置

css - W3CSS : centering input field

JavaScript函数编写

当 list 添加为资源时,Delphi 5 导致 EAccessViolation

ajax - 如何在 Webbrowser 中捕获 AJAX 请求

delphi - 取消固定和关闭取消固定之间的区别