Suppression de tlist dans un tlist
Question
J'essaie de libérer Tlist dans un TList dans un événement OnDestroy et Fastmm4 augmente une erreur de violation d'accès. Voici l'extrait de code.
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;
J'obtiens l'erreur de violation d'accès à tsignal (signallist.items [x]). GRATUIT; ligne. La libération des éléments d'alarme avant de libérer les éléments signallistes augmente l'erreur de violation d'accès, mais pourquoi?
MISE À JOUR: J'utilise Delphi 7.0 sur Windows XP. Les messages FastMM4 réels sont les suivants.
Fastmm a détecté une tentative d'appeler une méthode virtuelle sur un objet libéré. Une viilatation d'accès sera désormais augmentée afin d'interrompre l'opération actuelle.
Classe d'objets libérés: tlist
Méthode virtuelle: détruire
Adresse de la méthode virtuelle: 427cf0
Le numéro d'allocation était: 80055
Suivi par beaucoup de vidage de mémoire.
Selon cette erreur Fastmm4, si vous libérez un objet dans un autre objet, vous libérez automatiquement le propriétaire également. Je sais que cela ne peut pas être vrai, mais corrigez-moi si je me trompe.
Pas de solution correcte