AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Free, FreeAndNil und mehrere Variablen

Ein Thema von knochen · begonnen am 17. Mai 2010 · letzter Beitrag vom 17. Mai 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#1

Re: Free, FreeAndNil und mehrere Variablen

  Alt 17. Mai 2010, 15:22
Selbst wenn der Speicher gelöscht würde, dann würde B immernoch auf diese Stelle zeigen.
Was der Speichermanager nun genau macht, das kann man natürlich nicht bestimmen.

Aber es ist ja egal, ob nun der Speicher wirklich freigegeben würde,
kann man sowas nicht machen.

Ob nun etwas Altes angezeigt wird, oder es eine Zugriffsverletzung gibt, wenn man drauf zugreifen ... es kann immernoch passieren, daß inzwischen ein anderes Objekt erzeugt wurde, welches zufälig an der Stelle liegt ....

Man sollte sich einfach im Klaren sein, daß der Objektzeiger eben nur ein Zeiger auf ein Objekt ist
und daß man beim Kopieren dieses Zeigers eben aufpassen muß.

anderes Beispiel:
Delphi-Quellcode:
var
  a, b: THaus;

begin
  // THaus.Create baut ein Haus
  // a ist ein Zettel, auf welchen die Adressse draufgeschrieben wird
  a := THaus.Create;
  // b ist eine Kopie dises Zettels
  b := a;

  Memo1.Lines.Add(a.AdresseAblesen);
  Memo1.Lines.Add(b.AdresseAblesen);

  // das Haus wird zerstört
  a.Free;
  // der Zettel wird vernichtet (alles wird mit Weiß übermalt)
  a := nil;

  // geht nicht, da der Text ja gelöscht wurde
  Memo1.Lines.Add(a.AdresseAblesen);
  // tja, hier steht dennoch die Adresse drauf,
  // selbst wenn das Haus vernichtet und der andere Zettel überschrieben wurde
  Memo1.Lines.Add(b.AdresseAblesen);
end;
bezüglich dem ausgelesenen Wert von B
- der Speichermanager vernichtet nicht alles sofort, wenn man es ihm sagt ... vielleicht benötigt man den Baugrund ja demnächst gleich wieder ... drum kann man eventuell noch was auslesen
- wenn es doch schon gelöscht wurde, dann knallt es natürlich, weil du beim betreten des "Hauses" in ein tiefes Loch fällst
- inzwischen könnte ja auch schon ein neues Haus gebaut wurden sein, dann zeigt die Adresse natürlich immernoch auf etwas ... blos halt was Anderes
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz