![]() |
Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Hallo zusammen,
vielleicht stehe ich ja nur unglaublich auf dem Schlauch aber müsste in dem Codebeispiel "Assigned(slShow)" nicht false sein?
Delphi-Quellcode:
Wenn nein: Wie prüfe ich denn richtig, ob slShow freigeben kann/muss?
procedure TfMain.Button1Click(Sender: TObject);
var In_A: string; slShow: TStringList; begin In_A := ''; try if In_A = '' then exit; slShow := TStringList.Create; finally if Assigned(slShow) then slShow.Free; end; end; Aber - und mindestens genauso schlimm - die Zeile "if Assigned(slShow) then" wird ja nur ausgeführt, weil das "exit" zu einer Access Violation führt! Ist vielleicht meine Installation kaputt? Bin dankbar für jede Hilfe! Gruß Freejay PS: Das ist ein Testprojekt mit zwei Buttons, einem Memofeld und einem Opendialog. Sonst nix. Frisch zusammengebastelt. |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert
Zitat:
Zitat:
Zitat:
|
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Die Prüfung wird vom Free doch selbst schon durchgeführt, das kannst Du Dir von daher eigentlich sparen.
Und alles hinter dem finally wird immer ausgeführt. |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Zitat:
Zitat:
Delphi-Quellcode:
und dem zugehörigen
finally
Delphi-Quellcode:
.
end
|
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Fassen wir alles zusammen, dann ergibt sich
Delphi-Quellcode:
procedure TfMain.Button1Click(Sender: TObject);
var In_A: string; slShow: TStringList; begin In_A := ''; slShow := nil; try if In_A = '' then exit; slShow := TStringList.Create; finally slShow.Free; end; end; |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Hey, danke Euch beiden. :thumb:
Nach 20 Jahren Delphi ein paar Basics aufgefrischt... Irgendwas fällt immer mal wieder hinten runter, wenn man's lange nicht braucht... :roll: |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Zitat:
|
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Mein Delpbi gibt mir bei der Variante aus dem Eingangspost immer eine Compilerwarnung aus.
Beim slShow.Free sagt es, dass slShow eventuell nicht initialisiert sein könnte. Eben weil alles zwischen finally und dem zugehörigen end ausgeführt wird, das Create wird aber nicht immer ausgeführt, da die Routine ja mit exit vorher verlassen wird. Daher: Compilerwarnungen beachten, sie sind manchmal lässtig, aber immer hilfreich. ;-) |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Zitat:
Die Zeile "slShow := TStringList.Create;" sollte vor dem try stehen. |
AW: Prüfung auf Assigned(MyObject) true obwohl MyObject nicht initialisiert wurde
Hallöle...8-)
Besser...
Delphi-Quellcode:
oder
procedure TfMain.Button1Click(Sender: TObject);
var In_A: string; slShow: TStringList; begin In_A := ''; slShow := TStringList.Create; try if In_A = '' then exit; finally slShow.Free; end; end;
Delphi-Quellcode:
oder
procedure TfMain.Button1Click(Sender: TObject);
var In_A: string; slShow: TStringList; begin In_A := ''; if In_A = '' then begin exit; end else begin slShow := TStringList.Create; try // deins finally slShow.Free; end; end; end;
Delphi-Quellcode:
procedure TfMain.Button1Click(Sender: TObject);
var In_A: string; slShow: TStringList; begin In_A := ''; if not (In_A = '') then begin slShow := TStringList.Create; try // deins finally slShow.Free; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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 by Thomas Breitkreuz