Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Stackoverflow bei Records über 1000KB bei Streams
O'rallY - Mo 24.02.03 18:46
Titel: Stackoverflow bei Records über 1000KB bei Streams
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TMain.Button1Click(Sender: TObject); var fs: TFileStream; Buddys: array[0..99] of TBuddy; //TBuddy ist 21488 Bytest groß begin
fs := TFileStream.Create(IncludeTrailingBackslash( ExtractFilePath( ParamStr(0))) + 'test.txt', fmCreate); fs.Write(Buddys, SizeOf(Buddys)); fs.Free; end; |
Wenn ich fs.Write... auskommentiere erscheint der Fehler nicht. Der Fehler erscheint aber auch nur, wenn Buddys ca. unter 1000KB groß ist.
Woran liegt das?
Den gleiche Fehler bekomme ich auch bei Typisierten Dateien.
AndyB - Mo 24.02.03 18:54
Der Stack ist auf max. 1 MB begrenzt, damit ausgebrochene Rekursionen abgefangen werden können. Wenn du nun eine lokale Variable deklarierst, so wird diese auf dem Stack abgelegt, was den Stackspeicher verringert.
Der Ausweg ist ein dynamisch alloziierter Speichern oder gleich ein dynamisches Array. Dieser wird vom restlichen Arbeitsspeicher genommen und unterliegt somit nicht dieser Einschränkung.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TMain.Button1Click(Sender: TObject); var fs: TFileStream; Buddys: array of TBuddy; //TBuddy ist 21488 Bytest groß begin SetLength(Buddys, 1024 * 1024);
fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'test.txt', fmCreate); try fs.Write(Buddys[1], Length(Buddys) * SizeOf(TBuddy)); finally fs.Free; end; end; |
ExtractFilePath enthält bereits den abschließenden Backslash
O'rallY - Mo 24.02.03 20:57
Ah, danke! Wieder was gelernt. Ich meine, das hab ich schonmal irgendwo gelesen. Aber, naja, das Alter. Mit 15 verlässt einen das Gedächtnis ja schon sehr :wink:
| AndyB hat folgendes geschrieben: |
| ExtractFilePath enthält bereits den abschließenden Backslash |
Jo, stimmt eigentlich. Ist irgendwie ne schlechte Angewohnheit von mir :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!