我试图在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;
Run Code Online (Sandbox Code Playgroud)
我在TSignal(SignalList.items [x])收到访问冲突错误.线.在释放SignalList项之前释放AlarmList项会引发访问冲突错误,但是为什么?
更新:我在Windows XP上使用Delphi 7.0.实际的FastMM4消息如下.
FastMM检测到尝试在释放的对象上调用虚方法.现在将引发访问viloation以中止当前操作.
Freed Object类:TList
虚方法:破坏
虚方法地址:427CF0
分配编号为:80055
接着是大量的内存转储.
根据此FastMM4错误,如果您释放另一个对象中的对象,您也会自动释放所有者.我知道这不可能是真的,但如果我错了,请纠正我.
是不是在析构函数中TSignal释放其AlarmList成员?(这就是我要这样做的方式).
更新:如果删除该TSignal(SignalList.Items[x]).AlarmList.Free;行,它会起作用吗?
第二次更新:每个TList的项目需要释放,如果它包含对象的指针.
你的问题是,TSignal是不是一个TList.由于它负责释放其成员(例如Alarmlist),因此不应该明确释放该Alarmlist.
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |