Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

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

AW: Fehler bei TFileStream.ReadBuffer mit Buffer size

  Alt 2. Jul 2010, 09:38
FS.ReadBuffer(buf, ... .

Dieses überschreibt die "Variable"
und bei einem dynamischen Array oder String ist die Variable intern ein Zeiger.

Du überscheibts also den Zeiger, welcher aktuell nur 4 Byte groß ist und danach werden frende Daten oder nichtreservierte Speicherbereiche überschrieben (entspricht einem Buffer-Overrun).

Du willst aber die "Array-Daten" überschreiben.
also entweder das buf[0] um das erste Byte des Arrays zu referenzieren oder du brauchst eine andere "nichtzeiger"-Variable, wie z.B. ein statisches Array.

Delphi-Quellcode:
var buf: array of byte;
SetLengeh(buf, 9)
FS.ReadBuffer(buf[0], 9);
Delphi-Quellcode:
var buf: array[0..8] of byte;
SetLengeh(buf, 9)
FS.ReadBuffer(buf, 9);

// wobei hier ein dereferenzieren nicht schaden kann
var buf: array[0..8] of byte;
FS.ReadBuffer(buf[0], 9);

var buf: array[1..9] of byte;
FS.ReadBuffer(buf, 9); // FS.ReadBuffer(buf[1], 9);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat