![]() |
AW: String freigeben nur wo?
Hmm.. musste es doch nochmal ändern.
Es funktioniert nur beim ersten mal wird die gleiche Funktion nochmals aufgerufen dann kracht es mit invaliden Pointer.
Delphi-Quellcode:
so geht's.
{ linked List freigeben }
while LineStart <> nil do begin FPBuffer := LineStart; LineStart := FPBuffer.Ptr; { Bei Dispose kümmert sich der Compiler um das Finalize } Dispose(FPBuffer); end; { keine dangling Pointer hinterlassen } FPBuffer := nil; FToPBuffer := nil;
Delphi-Quellcode:
finde den Fehler bei deiner Variante leider nicht.
Count := LineStart.Max;
for i := 0 to Count do begin FPBuffer := LineStart; LineStart := FPBuffer.Ptr; Dispose(FPBuffer); end; Dispose(LineStart); FPBuffer := nil; FToPBuffer := nil; LineStart := nil; gruss |
AW: String freigeben nur wo?
Warum benutzt du nicht einfach PChar für Strings, die du selber verwalten willst? Oder, meinetwegen, WideString.
Denn "String" ist halt referenzgezählt und wird selber erzeugt und freigegeben. Bei "PChar" hast du auch schon "StrNew" und "StrDispose". |
AW: String freigeben nur wo?
[QUOTE=Dennis07;1425881]Warum benutzt du nicht einfach PChar für Strings, die du selber verwalten willst? Oder, meinetwegen, WideString.QUOTE]
Weil ich es nun mal auf string ausgelegt habe und ja die sind auch Unicodefähig zumindest ab Delphi 2009 glaube ich. Und im Grunde genommen sind Strings in Delphi schon mächtig. Warum soll ich mich dann mit PChar (PWideChar) rumschlagen wenn es auch so geht. Sorry aber ich habe keine Lust jetzt meine Library deshalb wieder komplett umzumodeln. Für Außenstehende ist das einfach zu erfragen warum machst du das nicht so oder so. ;) Zitat:
selbst freigegeben.. nein sonst müsste ich mir nicht die Arbeit machen oder? gruss |
AW: String freigeben nur wo?
Zitat:
Delphi-Quellcode:
Reicht völlig aus.
...
sBuffer := ''; Strings verhalten sich wie Interfaces, Stringvariablen wie Interfacevariablen. Ein String belegt einen bestimmten Speicherbereich, fällt der Referenzzähler des Strings auf 0, wird dieser an den Speichermanager als frei gemeldet. (Das heist nicht das der Speichermanager diesen auch sofort an Windows frei gibt oder mit Nullen überschreibt.) Wird ein String sowohl einer Variablen als auch einer Liste zugewiesen, wird trotzdem nur einmal Speicher belegt. Nur der Referenzzähler erhöht sich bei jeder Zuweisung. Wird der Speicherbereich gelöscht, verweisen natürlich auch beide auf den gelöschten Speicher. Das ist natürlich nicht erwünscht. |
AW: String freigeben nur wo?
Zitat:
Eben nicht! Denn so hatte ich es vorher weil ich das auch angenommen habe. Aber! ![]() Wenn meine vorherige Herangehensweise den String zu löschen richtig ist\wäre dann taugt EurekaLog nichts :) gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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