Thema: Delphi Falsche Speicherbereiche

Einzelnen Beitrag anzeigen

Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Falsche Speicherbereiche

  Alt 22. Okt 2004, 12:17
Nein, shmia hat nicht recht, der Compiler nimmt da alle nötigen Zwischenschritte vor.. ich hab am Anfang auch das als Fehlerursache im Aug gehabt und einiges entsprechend umgestellt, der Fehler blieb aber.

Inzwischen hab ich festgestellt, dass der Fehler wirklich bei den Typecasts lag, allerdings nicht auf Delphi-Seite, sondern auf API-Seite. In dem Prog wird recht oft von String auf WideString und PWideString gecastet. Bei jedem dieser Casts werden intern vom Compiler entsprechende Zwischenschritte durchgeführt die mit den APIs SysAllocStringLen und SysFreeString arbeiten. Ganz erklären kann ich es nicht, aber offensichtlich kommt mit den vielen Typecasts und damit verbundenem Speicher allozieren/deallozieren der Memory-Manager dieser APIs durcheinander, jedenfalls liefert beim 2ten Typecast die API-Funktion SysAllocStringLen als Ergebnis einen Zeiger auf dieselbe Adresse zurück auf die auch ein Feld von UserInfo zeigt. An genau dieser Stelle wurde zuvor bereits ein andrer WideString durch einen entsprechenden Typecast und Aufruf von SysAllocStringLen abgelegt. Offensichtlich versucht der Memory-Manager den Speicher wiederzuverwenden, nur dass in diesem Fall eben an dieser Stelle noch ein andrer String liegt.
Manuel Pöter
  Mit Zitat antworten Zitat