![]() |
Dynamische Array mit Daten aus TFileStream füllen
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:
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?
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); |
Re: Dynamische Array mit Daten aus TFileStream füllen
Zitat:
Du schreibst ausserhalb der Arraygrenzen?* *) Nur geraten, da uns die Fehlermeldung beharrlich verschwiegen wird. |
Re: Dynamische Array mit Daten aus TFileStream füllen
Probiers mal mit:
Delphi-Quellcode:
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 :)
stream.Read(FImages[i].data[b][0][/b], length);
|
Re: Dynamische Array mit Daten aus TFileStream füllen
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. |
Re: Dynamische Array mit Daten aus TFileStream füllen
Delphi-Quellcode:
Wie bereits gesagt...
stream.Read(FImages[i].data[0], length);
|
Re: Dynamische Array mit Daten aus TFileStream füllen
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? |
Re: Dynamische Array mit Daten aus TFileStream füllen
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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