![]() |
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 |
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 |
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... |
Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
Hallo,
er ist erklärbar wegen der Deklaration
Delphi-Quellcode:
und schon hätte es funktionieren sollen.
MesstellenBez:ShortString; // 16 Textzeichen aber 256 Byte belegt
statt MesstellenBez:ShortString[16]; // 16 Textzeichen und 17 Byte belegt 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 |
Re: Stacküberlauf bei Array einer Struktur >2000 Elemente
Struktur eignet sich dann halt nicht mehr für eine typisierte Datei
|
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:
Gruß Horst
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; |
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. |
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