Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#8

Re: Stacküberlauf bei Array einer Struktur >2000 Elemente

  Alt 26. Nov 2008, 12:58
Also der Stacküberlauf kommt direkt beim Aufrufen der Button-Prozedur:

Delphi-Quellcode:
procedure TfrmDatalogGUI.btnLadenClick(Sender: TObject);
var
  I: Integer;
  xlsFile : TXLSFile;
  template:string;
  sprache:Integer;
  Datensaetze: array[0..8192] of TDatensatz;
  Datum:TDate;
  Uhrzeit:TTime;
  Expo:Smallint;
  O2Einheit:string;
  EndOfDataRead:Integer;
  error:integer;
begin // <------------------ Hier knallts dann sofort (nachdem die Variablen deklariert worden sind)
// SetLength(Datensaetze,8192);
Aber mit dem dynamischen Array nicht:

Delphi-Quellcode:
procedure TfrmDatalogGUI.btnLadenClick(Sender: TObject);
var
  I: Integer;
  xlsFile : TXLSFile;
  template:string;
  sprache:Integer;
  Datensaetze: array of TDatensatz;
  Datum:TDate;
  Uhrzeit:TTime;
  Expo:Smallint;
  O2Einheit:string;
  EndOfDataRead:Integer;
  error:integer;
begin
  SetLength(Datensaetze,8192);
Ihr habt recht mit dem Shortstring belegt also wirklich 256 Byte:

Zitat:
Ein ShortString hat eine Länge von 0 bis 255 Zeichen. Obwohl sich seine Länge dynamisch ändern kann, beträgt die statische Speicherplatzzuweisung immer 256 Bytes. Im ersten Byte wird die Länge des Strings gespeichert, die restlichen 255 Byte stehen für die Zeichen zur Verfügung
  Mit Zitat antworten Zitat