AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

beschränkte Array-Länge ?

Ein Thema von Schneider-Huetter · begonnen am 5. Mär 2004 · letzter Beitrag vom 6. Mär 2004
Antwort Antwort
Schneider-Huetter

Registriert seit: 5. Mär 2004
97 Beiträge
 
Delphi 7 Personal
 
#1

beschränkte Array-Länge ?

  Alt 5. Mär 2004, 18:47
Hallo zusammen,
ich schreibe gerade ein Programm, das eine Datei binär einliest und dann byte-weise in ein Array schreibt (bzw. sollte). Das klappt soweit auch ganz gut, nur wenn ich eine bestimmte Dateigröße überschreite erhalte ich eine Stack-Overflow Meldung. Meine Testdatei ist 1.048.576 Bytes (genau ein MByte) groß, d.h. mein Array müsste 1.048.576 Felder besitzen, da in jedes genau ein Byte kommt. Doch anscheinend ist die Anzahl der Felder zu groß. Weiß jemand wie viele Felder man maximal erstellen kann und/oder wie man diese Größenbeschränkung umgehen kann?

Im Voraus schon mal Danke für eure Antworten
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: beschränkte Array-Länge ?

  Alt 5. Mär 2004, 19:47
Moin Schneider-Huetter,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Dein Problem kann ich nicht nachvollziehen.
Zum Testen hab' ich eben in ein dynamische array of byte eine 6 MB grosse Datei eingelesen, und das hat, erwartungsgemäss, problemlos funktioniert.

Ein wenig Sourcecode, wie Du die Daten einliest wäre hilfreich.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: beschränkte Array-Länge ?

  Alt 5. Mär 2004, 19:51
Entweder du verwendest ein dynamisches Array oder du speicherst das Array nicht als lokale Variable, sondern global oder als Attribut in einem Objekt.
  Mit Zitat antworten Zitat
Schneider-Huetter

Registriert seit: 5. Mär 2004
97 Beiträge
 
Delphi 7 Personal
 
#4

Re: beschränkte Array-Länge ?

  Alt 5. Mär 2004, 20:25
Danke erst mal für die nette Begrüßung und eure Antworten.

Hier kommt der Quelltext, in dem ich die Datei einlese:

Delphi-Quellcode:
Procedure RomEinlesen(Datei: String);

type
  TDatenBytes = array[0..1048576] of Byte;

var
  DatenBytes: TDatenBytes;
  i: Integer;
  DateiGr: Integer;

begin
  DateiGr:=FileSize(Datei);
  Form1.Edit1.Text:=IntToStr(DateiGr);

  with TFileStream.Create(Datei, fmOpenRead) do
  try
    Read(DatenBytes, SizeOf(DatenBytes));
   finally
    Free;
  end;

  //Die gelesenen Bytes zur Kontrolle in einer ListBox ausgeben
  for i:=0 to 1048576 do
  Form1.ListBox1.AddItem(IntToStr(DatenBytes[i]),nil);

end;
Ich hab hier mal ein statisches Array benutzt, aber auch wenn ich ein dynamisches verwende erhalte ich einen Laufzeitfehler (aber keinen Stapel-Überlauf)
  Mit Zitat antworten Zitat
LarsMiddendorf

Registriert seit: 4. Sep 2003
Ort: Hemer
104 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: beschränkte Array-Länge ?

  Alt 5. Mär 2004, 20:44
Bei einem dynamischen Array muß man das erste Element und nicht das Array selber übergeben. Falls du ein dynamisches Array benutzt geht es so besser: Read(DatenBytes[0], Length(DatenBytes)); Da das statische Array als lokale Varialbe deklariert ist, belegt es Speicher auf dem Stack. Wenn man die Deklaration vor die procedure schreibt wird der Speicher im Datensegment belegt und die Begrenzung gilt nicht mehr.

Delphi-Quellcode:
type
  TDatenBytes = array[0..1048576] of Byte;

var
  DatenBytes: TDatenBytes;

Procedure RomEinlesen(Datei: String);
...
...
  Mit Zitat antworten Zitat
Schneider-Huetter

Registriert seit: 5. Mär 2004
97 Beiträge
 
Delphi 7 Personal
 
#6

Re: beschränkte Array-Länge ?

  Alt 6. Mär 2004, 12:25
Vielen Dank LarsMiddendorf,
jetzt funktionierts prinzipziell einwandfrei, nur dauert das Einlesen eine halbe Ewigkeit. Kann man das Einlesen ins Array zu beschleunigen oder gibt es eine andere Möglichkeit, mein Problem zu lösen? Die Datei müsste eigentlich gar nicht in einem Array gespeichert sein, es muss lediglich ein (möglichst schneller) Zugriff auf ein beliebiges Byte in der Datei möglich sein.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: beschränkte Array-Länge ?

  Alt 6. Mär 2004, 13:07
Moin Schneider-Huetter,

dann nimm doch als Buffer einfach einen String, und lies die Datei in einem Stück ein.
Die Ausgabe in der Listbox dürfte allerdings das eigentliche Geschindigkeitsproblem darstellen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Schneider-Huetter

Registriert seit: 5. Mär 2004
97 Beiträge
 
Delphi 7 Personal
 
#8

Re: beschränkte Array-Länge ?

  Alt 6. Mär 2004, 14:21
Du hast völlig recht, es liegt tatsächlich nur an der ListBox-Ausgabe. Das mit dem String ist eigentlich wirklich die bessere Lösung.
Vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:21 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