Eliminazione di TLIST all'interno di una TLIST
Domanda
Sto cercando di liberare la TLIST all'interno di una TLIST in un evento onDestroy e FastMM4 sta sollevando un errore di violazione dell'accesso. Ecco lo snippet di codice.
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;
Ricevo un errore di violazione dell'accesso su Tsignal (SignAllist.items [x]). linea. Liberare articoli allarme prima di liberare gli articoli SignAllist solleva l'errore di violazione dell'accesso, ma perché?
Aggiornamento: sto usando Delphi 7.0 su Windows XP. I messaggi FastMM4 effettivi sono i seguenti.
FastMM ha rilevato un tentativo di chiamare un metodo virtuale su un oggetto liberato. Verrà ora sollevata una viloazione di accesso per interrompere l'attuale operazione.
Classe di oggetti liberati: TLIST
Metodo virtuale: distruggere
Indirizzo del metodo virtuale: 427cf0
Il numero di allocazione era: 80055
Seguito da un sacco di dump di memoria.
Secondo questo errore FastMM4, se si libera un oggetto all'interno di un altro oggetto, si libera automaticamente anche il proprietario. So che non può essere vero, ma correggimi se sbaglio.
Nessuna soluzione corretta