AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer-Adresse freigeben

Ein Thema von ford42 · begonnen am 12. Nov 2015 · letzter Beitrag vom 12. Nov 2015
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:10
OK man könnte Fragen, warum ein Record...

Bei einer Classe könntest Du FreeAndNil nehmen...

Du könntest Dir auch die Instance in einer TObjectList speichern und ohne durch die Liste zu laufen alle löschen...

Aber das muss jeder für sich selber entscheiden...
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:11
Ja, das ist mir soweit klar.

Nur suche ich gerade eine Möglichkeit, dass (wenn z.B. PWurzelNode.rechts.rechts.links.rechts.links gelöscht werden soll) PWurzelNode.rechts.rechts.links.rechts.links auf nil zeigt.

Hätte ich noch einen Pointer, der auf das Elternelement(?) zeigt, dann wäre dies ja kein Problem, jedoch soll ich es ohne so einen Pointer lösen.

EDIT: @Mavarik, sry deinen Beitrag, hab ich erst jetzt gesehen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:14
Delphi-Quellcode:
 Node.links.rechts := Node.rechts;
 Node.rechts.links := Node.links;
 Dispode( Node);
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:19
Hierfür?

Delphi-Quellcode:

  PNode = ^TNode;
   TNode = record
     daten: String;
     links: PNode;
     rechts: PNode;
   end;

Function SucheNode(Const ARoot : PNode;Const ASucher : String) : PNode;
begin
  Result := ARoot;
  While Result <> NIL do
    begin
      if Result.Daten = ASucher then
        exit;
      Result := Result.rechts;
    end;
end;

Procedure DelNode(TheNode : PNode);
begin
  if TheNode = NIL then
    exit;

  if (TheNode.Links <> NIL) then
    TheNode.Links.Rechts := TheNode.Rechts;

  if (TheNode.Rechts <> NIL) then
    TheNode.Rechts.Links := TheNode.Links;

  Dispose(TheNode);
  TheNode := NIL; // Eigentlich egal...
end;

Procedure DelNodeFromText(Const AText : String);
begin
  DelNode(SucheNode(Root,'Foo'));
end;

Geändert von Mavarik (12. Nov 2015 um 13:23 Uhr)
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:29
Danke.

Aber ihr "löscht" nun einfach ALLE letzten Pointer (Mavarik nur die, die auf nil zeigen und den selben Wert haben wie der, den ich löschen will).
Oder verstehe ich es gerade nicht richtig?

Geändert von ford42 (12. Nov 2015 um 13:31 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:35
Nein, wir biegen die Zeiger um

Vorher:
Code:
   
    Node -> Node -> Node
... n-1  <-  n  <- n+1 ...
Nachher:
Code:
   
    Node -> Node
... n-1  <-  n+1 ...
Markus Kinzler
  Mit Zitat antworten Zitat
ford42

Registriert seit: 2. Okt 2015
60 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 13:54
Aber Mavarik geht doch zum Elternelement, indem er nach dem Pointer sucht, der in Result.daten den selben Wert wie in ASucher hat und dann den vorherigen Pointer nimmt.

Aber wenn es ejtzt z.B. 2 mal die selbe Zahl (nehmen wir mal 6) gibt, dann wird ja vlt die "falsche" 6/Pointer gelöscht/abgezwickt oder nicht?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 14:01
Wenn es wirklich mehrere identische Knoten geben sollte, dann wäre es doch egal, welcher davon gelöscht wird.

Zudem nimmt er nicht den Vorgänger sondern schiebt den Zeiger weiter. Der zeigt am Anfang auf das Wurzellement und wird im Fall das das Zielelement noch nicht erreicht ist auf das nächste Element gesetzt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Pointer-Adresse freigeben

  Alt 12. Nov 2015, 15:01
Aber wenn es ejtzt z.B. 2 mal die selbe Zahl (nehmen wir mal 6) gibt, dann wird ja vlt die "falsche" 6/Pointer gelöscht/abgezwickt oder nicht?
Gut... Wenn Deine Einträge nicht eineindeutig sind, muss du halt nach einem anderen Kriterium suchen...

Darum ging es ja nicht...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz