我正在尝试在 onDestroy 事件中释放 Tlist 中的 Tlist,而 FastMM4 引发访问冲突错误。这是代码片段。
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]).Free 处收到访问冲突错误;线。在释放 SignalList 项目之前释放 AlarmList 项目会引发访问冲突错误,但为什么?
更新:我在 Windows XP 上使用 Delphi 7.0。实际的 FastMM4 消息如下。
FastMM 检测到尝试在已释放对象上调用虚拟方法。现在将引发访问违规以中止当前操作。
释放对象类:TList
虚法:销毁
虚拟方法地址:427CF0
分配编号为:80055
其次是大量的内存转储。
根据这个 FastMM4 错误,如果你在另一个对象中释放一个对象,你也会自动释放所有者。我知道这不可能是真的,但如果我错了,请纠正我。