Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: werden pointer automatisch aus dem Speicher gelöscht?

  Alt 8. Aug 2006, 12:36
Zitat von RavenIV:
Zitat von alleinherrscher:
Die sind eben immer mit aComputer.NextComputer.NextComputer.... usw. verknüpft.
Wenn ich jetzt einen Pointer lösche, setzte ich jetzt den Vorgänger des zu löschenden Pointers auf den Nachfolger des zu löschenden Pointers.

Danach versuche ich mit freeandnil(zulöschenderPointer) noch ein bisschen aufzuräumen,
aber bekomme immer Speicherverletzungen!!!
ist doch klar.
Du hast das zu löschende Element schon aus der Liste rausgenommen.
Also kommst Du nicht mehr an dieses Element dran. Wie willst Du es löschen?

Lösung:
Du gehst die Liste solange durch, bis du das Element vor dem zu löschenden Element gefunden hast.
Jetzt merkst Du Dir den Nachfolger des zu löschenden Elements in einer temporären Variablen.
Nun kannst du mit Free (Element.NextComputer) oder Delete (Element.NextComputer) das zu löschende Element löschen und dann die Liste neu verknüpfen (mit Hilde der temp.Variablen).
Ob Du Free oder Delete oder was anderes benötigst, hängt davon ab, wie Du die Elemente erzeugst.
Ne, ich hab das Element sozusagen noch in der Hand, pass auf:

folgende Procedure:

Delphi-Quellcode:

procedure TForm1.DeleteComputerFromList(Computer:aComputer);
var laufComputer:acomputer;
begin

 laufComputer:=FirstComputer; //die Wurzel, FirstComputer selbst enthält keine Informationen

 while (LaufComputer.nextcomputer<>Computer) and (LaufComputer.NextComputer<>NIL) do
 begin
   laufcomputer:=laufcomputer.NextComputer;
 end;

  LaufComputer.NextComputer:=Computer.NextComputer;

  freeandnil(Computer)

end;
Ich hab zwar den Pointer schon aus der Liste rausgenommen, aber die Variable Computer zeigt ja noch auf das Element, oder?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat