AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dynamische Array mit Daten aus TFileStream füllen

Dynamische Array mit Daten aus TFileStream füllen

Ein Thema von Brainstalker · begonnen am 17. Jun 2007 · letzter Beitrag vom 17. Jun 2007
Antwort Antwort
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#1

Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 01:02
Hallo,

ich habe ein kleines Problem beim auslesen einer Datei. Ich hab nur die Struktur der Datei und hab daraus eine klasse geschrieben. Es funktioniert auch fast alles. Nur an einer Stelle hakt es. Ich glaube es hängt mit einem dynamischen Array zusammen.

Code:
TSprImage = record
  width: word;
  height: word;
  compressedlength: word;
  data: array of char;
end;

...

FImages: array of TSprImage;
stream: TFileStream;
length: integer;

...

length := 18;

SetLength(FImages, FHeader.numberofimages);
SetLength(FImages[i].data, length);
stream.Read(FImages[i].data, length);
Wenn ich das auslesen der Daten so über ein dynamisches Array mache funktioniert es nicht. Wenn ich das Array data allerdings statisch mache dann geht es. Was könnte denn der Fehler sein?
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 02:17
Zitat von Brainstalker:
Was könnte denn der Fehler sein?
´
Du schreibst ausserhalb der Arraygrenzen?*

*) Nur geraten, da uns die Fehlermeldung beharrlich verschwiegen wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 04:48
Probiers mal mit:

  stream.Read(FImages[i].data[b][0][/b], length); Da ein dynamisches Array nix anderes ist (intern) als ein Zeiger, solltest du dem Compiler schon sagen, das er an die Adresse Schreibt auf die der Zeiger zeigt, nicht an die Adresse des Zeigers. Sonst gibts nämlich eine schöne Exception
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 10:27
Wusst ich doch das was Fehlt. Das passiert wenn man Beiträge schreibt obwohl man schon schlafen sollte.
Hier der Fehler:

---------------------------
Project1
---------------------------
Access violation at address 004055F5 in module 'Project1.exe'. Read of address 020201FE.
---------------------------
OK
---------------------------

Scheint also ein Fehler beim lesen zu sein so wie es da steht. Ich werde den Vorschlag mal ausprobieren, scheint ja wirklich so zu sein das es außerhalb des Arrays liegt.
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 10:29
stream.Read(FImages[i].data[0], length); Wie bereits gesagt...
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Brainstalker
Brainstalker

Registriert seit: 9. Jan 2004
Ort: Berlin
176 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 11:28
Ok es lag wirklich daran.
Mir stellt sich jetzt bloß eine Frage, warum funktioniert es wenn ich [0] bei statischen Arrays weg lasse. Ist ein statisches Array nicht genauso ein Pointer wie ein dynamisches? Oder liegt es vielleicht daran das bei statischen Arrays bereits der Speicher zum Anfang reserviert wird?
Michael N.
Brainstalker
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Dynamische Array mit Daten aus TFileStream füllen

  Alt 17. Jun 2007, 11:37
Nein. Ein statisches Array liegt irgendwo auf dem Stack und die Variable ist "das Array selbst". Ein dynamisches Array ist ein Pointer auf die Array-Struktur.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf