TObjectList.Clear访问冲突

hik*_*ari 7 delphi

我遇到了一个很大的应用程序非常奇怪的问题.我大量使用TObjectList存储自定义对象.在大型列表中,当我使用CLEAR方法时,我遇到了"地址访问冲突,地址读取......","特权指令"等奇怪的崩溃.在尝试删除列表中的最后一项时,我已经跟踪到这一点.我已经通过从破坏过程中记录包含的对象删除来检查这一点,并且还试图自己删除它们(对于:= olist.count-1 downto 0 do .. debugmsg('deleted'+ inttostr(a) ).. olist.delete(a)),这两种方式都是在删除列表中剩余的剩余项目时获得访问权限的权利.

这并不总是发生,因为我在其他领域使用clear,以及一些不同的(较小的)列表,但在我的应用程序中的一个非常具体的点发生这种情况.

我不知道可能出现什么问题,在清除过程中没有什么可以尝试访问列表,并且被硬币化的对象无法访问其父对象列表,在TObjectList.delete/clear方法中必须有一些东西搞砸了.它来清除最后一项.

有什么建议?使用Delphi XE.

Mas*_*ler 18

这听起来像你正在释放已经被释放的物体.要跟踪此情况,请下载FastMM的完整版本,添加FullDebugMode到Project Options-> Delphi Compiler下的Conditional Defines行和Linking set to Detailed下的Map File选项,然后重建.(构建,而不是编译.)然后将FullDebugMode DLL复制到与EXE相同的文件夹并运行它.它会在您分配和释放时观察您的内存,当您尝试第二次释放相同的对象时,它会捕获它并为您提供一些非常详细的调试数据,以确定问题的来源.

  • +1这是问题的最可能原因,也是尝试修复的最佳方式.还有其他可能的原因,但首先尝试一下. (4认同)
  • 得到它解决,FastMM很棒:)谢谢! (2认同)