Thema: Delphi Problem bei FreeMem

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

Re: Problem bei FreeMem

  Alt 15. Jul 2006, 21:52
Weil der String halt nicht so arbeitet

str ist ja "nur" ein pointer auf die Stringstruktur


Code:
RRRRCCCCDDDDDDDDDDDDDDDDDDDDDDD.....#0
^   ^   ^                            ^
^   ^   ab hier sind dann alle Elemente (Zeichen) aufgereit
^   Elemete im Array ... entspricht beim String der Zeichenanzahl
Refferenzzähler                     ^
^                                    ^
^____________________________________^
diese Daten liegen [b]einem[/b] Speicherblock
der Zeiger in str zeigt zwar nicht wie allgemein üblich auf den Anfang des resservierten Datenbereichs, sonden aud das erste Zeichen,
dies ist allerdings nur weil es halt so einfacher ist den string nach PChar zu casten.

zur Speicherverwaltung wird demnach immer PInteger(str)-2*SizeOf(Integer) an GetMem, ReallocMem und FreeMem geleitet.
Und da gibt es Probleme, sobald du den String mal verändernfreigeben willst

Length arbeitet ja auch nur mit PInteger(PInteger(str)-SizeOf(Integer))^, was auch falsche werte liefern würd, wenn dman daran rumfummelt.
$2B or not $2B
  Mit Zitat antworten Zitat