gpt4 book ai didi

delphi - TObjectList.Clear 访问冲突

转载 作者:行者123 更新时间:2023-12-03 14:49:50 25 4
gpt4 key购买 nike

我在大型应用程序中遇到了一个非常奇怪的问题。我大量使用 TObjectList 在其上存储自定义对象。在大型列表中,当我使用 CLEAR 方法时,我遇到了奇怪的崩溃,“地址访问冲突..读取地址..”“特权指令”等。我已经跟踪到在尝试删除列表中的最后一项时发生的情况。我通过从销毁过程中记录包含的对象删除来检查这一点,并尝试自己删除它们(对于 a := olist.count-1 downto 0 do.. debugmsg('deleting '+inttostr(a) ).. olist.delete(a) ),这两种方法在删除列表中最后一个剩余项目时都会导致访问冲突。

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

我不知道可能出了什么问题,在清除期间没有任何东西试图访问列表,并且共同包含的对象无法访问其父对象列表,TObjectList.delete/中一定有什么问题清除最后一项时的明确方法。

有什么建议吗?使用Delphi XE。

最佳答案

在我看来,您正在释放已经释放的对象。要追踪这一点,download the full version of FastMM ,将 FullDebugMode 添加到“项目选项”->“Delphi 编译器”下的“条件定义”行,并将“链接”下的“映射文件”选项设置为“详细”,然后重建。 (构建,而不是编译。)然后将 FullDebugMode DLL 复制到 EXE 所在的同一文件夹中并运行它。当您分配和释放时,它会监视您的内存,当您尝试第二次释放同一对象时,它会捕获该内存并为您提供一些非常详细的调试数据,以了解问题的根源。

关于delphi - TObjectList.Clear 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com