Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   StrDispose nil? (https://www.delphipraxis.net/204731-strdispose-nil.html)

venice2 23. Jun 2020 07:39

StrDispose nil?
 
Wenn ich einen String (PAnsiChar) mit StrDispose freigebe ist es nötig anschließend den String auf NIL zu setzen?
Oder kann man sich das sparen.
Delphi-Quellcode:
if Assigned(FileName) then
begin
  StrDispose(FileName);
  FileName := nil; // <<<
end;
Filename enthält ja immer noch seltsame Zeichen nach Dispose.

jaenicke 23. Jun 2020 07:52

AW: StrDispose nil?
 
Der Ablauf ist: Reservierung mit StrAlloc oder StrNew, Verwendung der Variablen und dann StrDispose zur Freigabe. Mehr musst du nicht machen.

Der Pointer zeigt aber weiter auf den Speicherbereich, nur dass er nicht mehr gültig ist. Der Speicher wird bei der Freigabe aber ja nicht unbedingt sofort überschrieben.

Siehe auch in der Doku:
http://docwiki.embarcadero.com/Libra...ngs.StrDispose

TiGü 23. Jun 2020 07:56

AW: StrDispose nil?
 
Ich nehme an, Filename ist PAnsiChar oder PWideChar?
Notwendig ist es nicht, aber für das Debuggen ggf. ganz hilfreich.
Nach Freigabe mit StrDispose zeigt der Zeiger halt ins digitale Nirvana.
Erstellt wurde Filename mit StrNew?

venice2 23. Jun 2020 08:07

AW: StrDispose nil?
 
Zitat:

Zitat von TiGü (Beitrag 1468065)
Ich nehme an, Filename ist PAnsiChar oder PWideChar?
Notwendig ist es nicht, aber für das Debuggen ggf. ganz hilfreich.
Nach Freigabe mit StrDispose zeigt der Zeiger halt ins digitale Nirvana.
Erstellt wurde Filename mit StrNew?

Zitat:

String (PAnsiChar)
yep.
Zitat:

Reservierung mit StrAlloc oder StrNew
Na ich mach's mit AnsiStrAlloc

Ok. Denke kann nicht falsch sein wenn ich ihn auf NIL setze dann weis ich das er leer ist.
Hat mich einfach mal interessiert.

Rollo62 23. Jun 2020 14:11

AW: StrDispose nil?
 
Zitat:

Zitat von venice2 (Beitrag 1468067)
Denke kann nicht falsch sein wenn ich ihn auf NIL setze dann weis ich das er leer ist.

Genau, würde ich auch so machen, wenn das nochmal neu belegt werden könnte.
Ist aber wohl mehr eine philosophische Frage: to NIL or not to NIL.
Da gibt es wohl zwei verhärtete Lager, suche einfach mal nach Diskussionen um FreeAndNil ...

venice2 23. Jun 2020 15:37

AW: StrDispose nil?
 
Zitat:

Zitat von Rollo62 (Beitrag 1468096)
Zitat:

Zitat von venice2 (Beitrag 1468067)
Denke kann nicht falsch sein wenn ich ihn auf NIL setze dann weis ich das er leer ist.

Genau, würde ich auch so machen, wenn das nochmal neu belegt werden könnte.
Ist aber wohl mehr eine philosophische Frage: to NIL or not to NIL.
Da gibt es wohl zwei verhärtete Lager, suche einfach mal nach Diskussionen um FreeAndNil ...

Das Problem ist halt wenn ich mit diesen String etwas vergleichen möchte und er ist nicht NIL (leer) dann sieht das schlecht aus.
Wie will man mit dem Kauderwelsch der dann noch im String enthalten ist etwas vergleichen. Aussichtslos

Rollo62 23. Jun 2020 17:03

AW: StrDispose nil?
 
Das nil steht für "ungültiger Zeiger",
dann sollte man auf keinen Fall mit dem StringPointer in irgendeiner Weise arbeiten,
weil ein Object dazu nicht existiert und er wie schon geschrieben ins Nirvana zeigt.
Ist der Zeiger <> nil dann kann man damit arbeiten.
Dafür ist das nil gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 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