Я пытаюсь освободить Tlist в Tlist в событии onDestroy, и 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]). Бесплатно;линия.При освобождении элементов AlarmList перед освобождением элементов SignalList возникает ошибка нарушения доступа, но ПОЧЕМУ?
Обновление: я использую Delphi 7.0 в Windows XP.Фактические сообщения FastMM4 следующие:
FastMM обнаружил попытку вызова виртуального метода на освобожденном объекте.Расширение доступа теперь будет вызываться для прерывания текущей операции.
Freed Object class: TList
Виртуальный метод: Destroy
Адрес виртуального метода: 427CF0
Номер выделения был: 80055
С последующим большим дампом памяти.
В соответствии с этой ошибкой FastMM4, если вы освобождаете объект в другом объекте, вы автоматическиосвободить владельца.Я знаю, что это не может быть правдой, но поправьте меня, если я ошибаюсь.