![]() |
AV bei MemoryStream
Morgen.
Ich habe hier gerade folgendes nerviges Problem: Ich lese aus einem FileStream und schreibe die Daten in einen MemoryStream:
Delphi-Quellcode:
Bei memstr.write (Hier Zeile 19) erhalte ich eine AV. Woran könnte das liegen?
procedure TTiles.LoadFromFile(FileName: String);
var fs: TFileStream; memstr: TMemoryStream; size: Cardinal; buf: array of Byte; tgaimg: TTarga; begin imglst.Items.Clear; fs:=TFileStream.Create(FileName, fmOpenRead); memstr:=TMemoryStream.Create; tgaimg:=TTarga.Create; try fs.Read(FTileWidth, sizeof(Cardinal)); fs.Read(FTileHeight, sizeof(Cardinal)); while fs.Position<fs.Size do begin fs.Read(size, sizeof(Cardinal)); setlength(buf, size); fs.Read(buf, size); memstr.Write(buf, size); tgaimg.LoadFromStream(memstr); memstr.Clear; tgaimg.SaveToStream(memstr); with imglst.Items.Items[imglst.Items.Add.Index].Picture do begin Bitmap:=TBitmap.Create; Bitmap.LoadFromStream(memstr); end; memstr.Clear; end; setlength(buf, 0); finally fs.free; memstr.free; tgaimg.free; end; end; |
Re: AV bei MemoryStream
Moin Manuel,
weil Du bei Arrays auch immer den Index mit angeben musst:
Delphi-Quellcode:
ansonsten überschreibst Du das, was hinter dem Pointer steht, der die Adresse von Buf enthält, und nicht den Buffer.
memstr.Write(buf[0], size);
|
Re: AV bei MemoryStream
:wall:
Ich bin doch auch so dumm... |
Re: AV bei MemoryStream
Nur mal so als Tipp für die Zukunft, um deine Programme besser zu machen: Verwende Resourcen-Schutzblöcke (try - finally, in deinem Fall, 3 Mal *g*). Dein Code ist ja schlimm. :stupid:
|
Re: AV bei MemoryStream
Jaa, ich weiß. Mach ich normalerweise auch. Und das kommt auch später noch rein. Ich bin doch kein Anfänger. OK, ich bin ein Anfänger, aber kein blutiger. Jedenfalls kein blutverschmierter.
|
Re: AV bei MemoryStream
Zitat:
|
Re: AV bei MemoryStream
Ich meinte das eigentlich ernst. Ich bin ein Anfänger. Kein Totalanfänger, aber immer noch ein Anfänger.
|
Re: AV bei MemoryStream
Aber wenn du es weißt, dass es fehlt, warum machst du es denn nicht gleich richtig? Dann kannst du es im Nachhinein auch nicht vergessen und hie rim Forum steht richtiger Code.
|
Re: AV bei MemoryStream
:roll:
Na gut, ich ändere es schnell. Es war eine kleine Frage und ich dachte, ich müsste den Code nicht extra vorher aufbereiten. Ich werde nächstes mal schön überall try-excepts hinsetzen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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