Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stack Overflow ohne Ereignis (https://www.delphipraxis.net/114844-stack-overflow-ohne-ereignis.html)

Coder1990 1. Jun 2008 16:16


Stack Overflow ohne Ereignis
 
Seas,

folgendes:
Delphi-Quellcode:
procedure TMain.SaveFileAs1Click(Sender: TObject);
var
f: file of tcodepassword;
temp:tcodepassword;
i:integer;
begin
if SD.Execute then begin
current:=sd.FileName;
assignfile(f,sd.FileName);
rewrite(f);

for i:=1 to LBPW.Count do begin
temp:=codec(data[i]);
Write(f,temp);
end;
closefile(f);
               end;
end;
bei aufruf dieser procedure wird noch vor dem aufrufen von sd (savedialog) ein stack overflow gemeldet...
beim weglassen des inhalts der for schleife passiert dies aber nicht... warum?
p.s. die function codec erzeugt keinen overflow, sie basiert maximal auf for schleifen...

Apollonius 1. Jun 2008 16:37

Re: Stack Overflow ohne Ereignis
 
Ich schätze mal, dass temp zu viel Platz einnimmt (es wird wegoptimiert, wenn du es nicht verwendest). Wie sieht die Deklaration von tcodepassword aus?

Coder1990 1. Jun 2008 16:40

Re: Stack Overflow ohne Ereignis
 
Delphi-Quellcode:
type tcodepassword = record
bla1:string[100];
bla2: string[100];
bla3: string[100];
bla4: array[1..100] of string [100];
bla5: array[1..100] of array[1..100] of string[100];
bla6: array[1..100] of string[100];
end;
ok hat sich wohl erledigt... ich kürze einfach die arrays und die maximale länge der strings danke

Apollonius 1. Jun 2008 16:53

Re: Stack Overflow ohne Ereignis
 
Ich glaube, dass du in jedem Fall auf dynamische Arrays umsteigen solltest. Diese Deklaration ist mir ziemlich suspekt.

Bernhard Geyer 1. Jun 2008 17:55

Re: Stack Overflow ohne Ereignis
 
Delphi-Quellcode:
bla5: array[1..100] of array[1..100] of string[100]
Allein dieser Teil benötigt 1 MB auf dem Stack (Ab D2008 mit Unicodestrings 2 MB).
Und da tcodepassword auf dem Stack abgelegt wird, wird die defaultgröße des Stacks nicht ausreichen.


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