我想在onDestroy事件中的Tlist中释放Tlist,并且FastMM4正在引发访问冲突错误。这是代码片段。删除TList中的TList
procedure TSignalFrm.FormDestroy(Sender: TObject);
var
x,y: integer;
begin
for x := 0 to signalList.Count - 1 do
begin
for y:=0 to TSignal(SignalList.Items[x]).alarmList.Count-1 do
begin
TAlarm(TSignal(SignalList.Items[x]).alarmList.Items[y]).Free;
end;
TSignal(SignalList.Items[x]).AlarmList.Free;
TSignal(SignalList.Items[x]).Free;
end;
SignalList.Free;
end;
我在TSignal(SignalList.items [x])获取访问冲突错误。线。释放SignalList项目之前释放AlarmList项目会引发访问冲突错误,但是为什么?
更新:我在Windows XP上使用Delphi 7.0。实际的FastMM4消息如下。
FastMM检测到尝试在释放的对象上调用虚拟方法。现在将提出访问视图以中止当前操作。
已释放对象类:从TList
虚拟方法:消灭
虚方法地址:427CF0
分配数为:80055
随之而来的是大量的内存转储。
根据此FastMM4错误,如果您释放另一个对象内的对象,则也会自动释放所有者。我知道这不可能是真的,但如果我错了,请纠正我。
您使用的是什么版本的Delphi? – 2011-03-25 14:26:39
“FastMM4正在引发访问冲突错误”和“我得到访问冲突错误”不提供任何信息。什么是确切的错误信息(包括任何内存地址)?尽管我们可以猜到它们是什么,但当我们不必这样做时,你会得到更好更快的答案。另外,正如@ M.Sameer所说,知道哪个Delphi版本可以提供帮助。 – 2011-03-25 14:30:16
TSignal和TAlarm构造函数/析构函数的代码也可以提供帮助,以及用于向/从信号添加/删除警报的任何代码。 – 2011-03-25 15:47:17