AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde

Ein Thema von freejay · begonnen am 23. Mai 2019 · letzter Beitrag vom 25. Mai 2019
Antwort Antwort
Schokohase
(Gast)

n/a Beiträge
 
#1

AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde

  Alt 24. Mai 2019, 14:45
Puh, da ist einiges falsch.

Das Create gehört vor den try.

Dass das obige "sl1.Free;" funktioniert, liegt vielleicht nur daran, dass bei TStringList zufällig nichts schlimmes passiert.
Free ruft Destroy() auf und wenn dort auf Felder zugegriffen wird, dann gibt es zwangsläufig eine Schutzverletzung.
Wenn bei obigem "// beliebiger code hier" eine Exception passiert, dann bleibt sl1 nil

"Dass die Methode Free auf nil prüft" ist auch falsch. FreeAndNil prüft dagegen.
Bitte, erst informieren, dann dementieren.

Das Create kann stehen wo will.
Delphi-Quellcode:
var
  f: TObject;
begin
  f := TObject.Create;
  try

  finally
    f.Free;
  end;
end;
oder
Delphi-Quellcode:
var
  f: TObject;
begin
  f := nil;
  try
    f := TObject.Create;

  finally
    f.Free;
  end;
end;
Ist beides gleichwertig. Die zweite Variante macht allerdings nur dann richtig Sinn, wenn man mehrere Instanzen mit einem Resourcen-Schutzblock absichern kann/will.

Das mit dem Free und nil hat Uwe ja schon erklärt.

Manchmal ist Erkenntnis nur einen Klick entfernt und da wundert man sich halt schon manchmal über das was hier an Wissen offenbart wird.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde

  Alt 25. Mai 2019, 12:40
Dazu gibt es ja zum Glück das Forum.
Asche auf mein Haupt. Tut mir leid.
Ich war mir so sicher ... War das schon immer so?

Lustig: Habe nach "procedure TObject.Free;" bei mir gesucht und gefunden:
Delphi-Quellcode:
procedure TObject.Free;
begin
  Dispose(PObject(@Self), Done);
end;
Allerdings stand oben drin "Turbo Pascal Version 7.0"

Geändert von freimatz (25. Mai 2019 um 12:57 Uhr)
  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 17:39 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