Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Dynamischen Record mir sendbuff (TServerSocket) versende

  Alt 24. Mär 2008, 17:41
Hi Jackie,

dir auch Frohe Ostern.

Dynamisch wäre dein Record dann, wenn du den benötigten Speicherplatz explizit zur Laufzeit anfordern würdest - tust du aber nicht.

Weiter enthält dein Record zwei ShortStrings, die du fix auf 11 und 2 Byte dimensioniert hast - jeweils das erste Byte enthält die tatsächlich benutzte Anzahl von Zeichen, die du mittels Length() abfragen und mittels SetLength() festlegen kannst.

Groben Unfug treibst du, wenn die Länge deines dParam mittels SetLength() auf vier setzt, durch die vorherige statische Dimensionierung aber nur maximal ein Byte nutzbarer Speicher festgelegt wurde. Beim Zugriff auf dParam wird dann ein Speicherbereich gelesen bzw. geschrieben, der eigentlich Variablen beherbergt, die vom Übersetzer direkt "hinter" deinen Record gelegt wurden.

Ahnst du schon etwas?

Durch die übliche Speicherausrichtung kannst du gerade noch drei zusätzliche Bytes in deinen Record packen, bevor der Zeiger auf s, der gleich anschließend gespeichert ist, von deiner Zuweisung an dParam überschrieben wird.

Freundliche Grüße
  Mit Zitat antworten Zitat