AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Stacküberlauf bei Array einer Struktur >2000 Elemente
Thema durchsuchen
Ansicht
Themen-Optionen

Stacküberlauf bei Array einer Struktur >2000 Elemente

Ein Thema von DelphiManiac · begonnen am 26. Nov 2008 · letzter Beitrag vom 26. Nov 2008
Antwort Antwort
Seite 2 von 2     12   
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#11

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

  Alt 26. Nov 2008, 12:21
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

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

  Alt 26. Nov 2008, 12:27
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#13

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

  Alt 26. Nov 2008, 17:10
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...
Uwe Raabe
  Mit Zitat antworten Zitat
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#14

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

  Alt 26. Nov 2008, 17:26
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 26. Nov 2008, 18:41
Struktur eignet sich dann halt nicht mehr für eine typisierte Datei
Markus Kinzler
  Mit Zitat antworten Zitat
Horst_

Registriert seit: 22. Jul 2004
Ort: Münster Osnabrück
116 Beiträge
 
#16

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

  Alt 26. Nov 2008, 21:10
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#17

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

  Alt 26. Nov 2008, 21:12
Bezog sich auf das dynamisch. So geht es natürlich
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz