![]() |
Stack Overflow ohne Ereignis
Seas,
folgendes:
Delphi-Quellcode:
bei aufruf dieser procedure wird noch vor dem aufrufen von sd (savedialog) ein stack overflow gemeldet...
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; 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... |
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?
|
Re: Stack Overflow ohne Ereignis
Delphi-Quellcode:
ok hat sich wohl erledigt... ich kürze einfach die arrays und die maximale länge der strings danke
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; |
Re: Stack Overflow ohne Ereignis
Ich glaube, dass du in jedem Fall auf dynamische Arrays umsteigen solltest. Diese Deklaration ist mir ziemlich suspekt.
|
Re: Stack Overflow ohne Ereignis
Delphi-Quellcode:
Allein dieser Teil benötigt 1 MB auf dem Stack (Ab D2008 mit Unicodestrings 2 MB).
bla5: array[1..100] of array[1..100] of string[100]
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