AGB  ·  Datenschutz  ·  Impressum  







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

StrDispose nil?

Ein Thema von venice2 · begonnen am 23. Jun 2020 · letzter Beitrag vom 23. Jun 2020
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

StrDispose nil?

  Alt 23. Jun 2020, 08:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: StrDispose nil?

  Alt 23. Jun 2020, 08:52
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
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: StrDispose nil?

  Alt 23. Jun 2020, 08:56
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?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: StrDispose nil?

  Alt 23. Jun 2020, 09:07
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.

Geändert von venice2 (23. Jun 2020 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#5

AW: StrDispose nil?

  Alt 23. Jun 2020, 15:11
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 ...
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: StrDispose nil?

  Alt 23. Jun 2020, 16:37
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#7

AW: StrDispose nil?

  Alt 23. Jun 2020, 18:03
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.
  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 05:16 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