Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stacküberlauf bei Array einer Struktur >2000 Elemente (https://www.delphipraxis.net/124853-stackueberlauf-bei-array-einer-struktur-2000-elemente.html)

Horst_ 26. Nov 2008 12:21

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

ich denke, bei einem Array wird hintereinander gespeichert, der Zugriff erfolgt ja über einen berechnetetn Index.
Bei einer Vergrößerung wird das komplette array in den vergrösserten Bereich kopiert.

Eine Liste verteilt die Daten beliebig.

Gruß Horst

mkinzler 26. Nov 2008 12:27

Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
 
Ein (dyn.) Array wird immer am Stück gespeichert, aber nicht innerhalb der Datenstruktur.
Ein Liste verteilt, TList ist aber m.W. keine echte Liste sondern verwendet einen dyn. Array

Uwe Raabe 26. Nov 2008 17:10

Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
 
Ist das Array statisch als lokale Variable deklariert, wird es in seiner gesamten Größe auf dem Stack angelegt. Ein dynamisches Array ist ein Pointer auf ein Array mit variabler Größe, wobei nur der Pointer auf dem Stack angelegt wird, das eigentliche Array aber auf dem Heap.

Die maximale Stack-Größe wird übrigens in den Linker-Einstellungen angegeben und beträgt standardmäßig 1MB! Der Stack-Overflow ist also durchaus erklärbar...

Horst_ 26. Nov 2008 17:26

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

er ist erklärbar wegen der Deklaration
Delphi-Quellcode:
 MesstellenBez:ShortString; // 16 Textzeichen aber 256 Byte belegt
statt
 MesstellenBez:ShortString[16]; // 16 Textzeichen und 17 Byte belegt
und schon hätte es funktionieren sollen.
Aber das dynamische Feld ist immer auf der sicheren Seite, falls man die Größe später einmal stark verändert und sich dann doch wieder über einen Stack-overflow wundern muss.

Gruß Horst

mkinzler 26. Nov 2008 18:41

Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
 
Struktur eignet sich dann halt nicht mehr für eine typisierte Datei

Horst_ 26. Nov 2008 21:10

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

so ganz stimmt das ja nicht. Dazu muss man ja einen Type einführen.
Fragt sich nur, ob die Daten auch so in der Datei eingefügt werden.

Delphi-Quellcode:
type
 TMsBez = string[16];

 TDatensatz = record
  MesstellenNr:Byte;
  MesstellenBez: TMsBez;
  Tag:Byte;
  Monat:Byte;
  Jahr:Byte;
  Stunde:Byte;
  Minute:Byte;
  Status:Word;
  O2:Word;
  O2Unit:Byte;
  Temp:Word;
  Stoerung:Byte;
  ADC_V_Bat:Word;
end;
Gruß Horst

mkinzler 26. Nov 2008 21:12

Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
 
Bezog sich auf das dynamisch. So geht es natürlich


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz