Autor Beitrag
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mo 24.02.03 18:46 
ausblenden 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.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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.

ausblenden 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

_________________
Ist Zeit wirklich Geld?
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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:

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...