Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#8

Re: String-Result explizit freigeben

  Alt 29. Jun 2009, 11:43
Zitat von AJ_Oldendorf:
Ich meinte auch eher den Datentyp String anstatt PChar.
Und wenn dieser lokal deklariert ist, wird er mit Ende der Funktion freigegeben, da dort sein referencecounter auf 0 kommt. Und damit ist der Speicher auf den der PChar vom Result zeigt (bei temporären cast) nicht mehr gültig und PChar zeigt in's Datennirvana.

Zitat von AJ_Oldendorf:
Das PChar ein Zeiger ist und dieser entsprechend wieder freigegeben werden muss, war mir klar.
Nur wenn du wirklich mit New() oder ähnlichem Speicher alloziierst. Ein temporärer Cast von einem String alloziiert keinen Speicher sondern lässt den Zeiger auf den Dateninhalt des Strings zeigen. Somit verlieren diese PChar auch ihre Gültigkeit mit der Freigabe des zugehörigen Strings. Und durch diesen Umstand ist nichts freizugeben, da die Adresse (also der Zeiger) ein Ordinalwert ist und somit keine Speicheralloziierung braucht (eher Register EAX als Rückgabewert).
  Mit Zitat antworten Zitat