Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMemoryStream.Read - Crash ohne Kommentar! (https://www.delphipraxis.net/88883-tmemorystream-read-crash-ohne-kommentar.html)

SnuffMaster23 22. Mär 2007 15:05


TMemoryStream.Read - Crash ohne Kommentar!
 
Diese Zeile bereitet mir gerade Kopfschmerzen, da crasht das Programm immer ohne Fehlermeldung (ohne Debugger):
Delphi-Quellcode:
Stream1.Read(Fil, Stream1.Size);
Fil ist ein string.

Mit Debugger krieg ich folgende Meldung:
Project C:\Dokumente und Einstellungen\SnuffMaster23\Eigene Dateien\Eigene Programme\Tool\Project1.exe faulted with message: 'access violation at 0x7c9478ae: write of address Ox00030ffc'. Process Stopped. Use Step or Run to continue.

In dem Stream stecken 11,4 MB, aber das dürfte der String ja leicht packen.

Robert Marquardt 22. Mär 2007 15:13

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
Das gibt natuerlich ein heftiges Problem, da der string wahrscheinlich nicht lang genug ist um das ganze File aufzunehmen.
Vorher ein SetLength(Fil, Stream1.Size) machen und es muss Stream1.Read(PChar(Fil)^, Stream1.Size); heissen.

SnuffMaster23 22. Mär 2007 15:20

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
SetSize hatt ich auch schon davor, hat (allein) nichts gebracht.
Mit dem dereferenzierten Zeiger krieg ich jetzt ne ganz normale Zugriffsverletzung. :(

//Zugriffsverletzung kommt weiter unten :oops:
Da sollte ich wahrscheinlich auch die Zeigervariente nehmen.
Danke!!

shmia 22. Mär 2007 15:24

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
Delphi-Quellcode:
Stream1.Read(Fil, Stream1.Size); // FALSCH !!

//Richtig
SetLength(Fil, Stream1.Size); // genügend Speicher reservieren
Stream1.Read(Fil[1], Stream1.Size);

SubData 22. Mär 2007 15:27

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
Is der Stream auch mit Create erstellt worden? :>

SnuffMaster23 22. Mär 2007 15:33

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
Jo isser.
Es funzt mittlerweile mit der Lösung von Robert.
Sorry, hätt ich deutlicher schreiben sollen^^

Robert Marquardt 22. Mär 2007 15:42

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
PChar(Fil)^, PChar(Fil)[0] und Fil[1] sind synonym. Man muss sich nur klarmachen wie Delphi das handhabt.

Muetze1 23. Mär 2007 00:51

Re: TMemoryStream.Read - Crash ohne Kommentar!
 
... aber Fil allein, klappt bei einem solchen Aufruf grundsätzlich nicht (wenn Fil Ansi/WideString ist)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 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