![]() |
Stack Überlauf
Hallo,
vielleicht kann mir wer helfen. Irgendwie fällt mir momentan nix sinnvolles ein. Ich möchte eigentlich das der Buffer so groß ist, wie die Datei die ich öffne. Leider kommt es beim Vergrößern der Konstanten size über den momentanen Wert immer zu einem Stack Überlauf.
Delphi-Quellcode:
const
size = 1010000; var filestream: tfilestream; buffer: array[0..size] of byte; filestream := TFileStream.Create(file, fmOpenReadWrite); filestream.Read(buffer, size); |
Re: Stack Überlauf
heißt deine Variable für den Dateinamen wirklich "file"? wenn ja würde ich dort ansetzen. Eventuell macht der compiler was komisches weil es ein reservierter Ausdruck/Typ ist.
|
Re: Stack Überlauf
Der Stack ist standardmäßig auf 1 MB begrenzt, damit Endlosrekursionen mit der "Notbremse" gestoppt werden können. Wenn du nun eine so große Variable auf dem Stack anlegst (lokale Variablen sind immer auf dem Stack), dann geht das halt nicht. Deswegen sollte man in deinem Fall eher auf ein dynamische Array zurückgreifen.
Delphi-Quellcode:
const
size = 1010000; var filestream: TFileStream; buffer: array of byte; filestream := TFileStream.Create(file, fmOpenReadWrite); SetLength(buffer, size); // genug Speicher reservieren, die Freigabe übernimmt Delphi für dich filestream.Read(buffer[0], size); // hier immer das erste Zeichen angeben (außer bei .NET) |
Re: Stack Überlauf
Moin S11,
schreib es mal so:
Delphi-Quellcode:
Wenn Du nicht auf den ersten Wert [0] zugreifst, schreibst Du nicht in den Buffer sondern überschreibst den Wert der Variablen und alles was dahinter steht.
filestream.Read(buffer[0], size);
(das ist, glaube ich, der "beliebteste" (häufigste) Fehler beim TFileStream ;-)) |
Re: Stack Überlauf
wow, vielen Dank für die schnellen Antworten. Ich bin echt begeistert. Es funktioniert jetzt der Tipp mit dem dynamischen Array war genau das richtige. Danke jbg und auch SirThornberry und Christian Seehase.
|
Re: Stack Überlauf
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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 by Thomas Breitkreuz