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 エラーによると、別のオブジェクト内でオブジェクトを解放すると、所有者も自動的に解放されます。それが真実ではないことはわかっていますが、間違っている場合は修正してください。