Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stack overflow (https://www.delphipraxis.net/2185-stack-overflow.html)

gfaw 11. Jan 2003 14:09


Stack overflow
 
Hi,

ich habe nun meine Applikation, die mit Delphi6 fehlerfrei lief, auf Version 7 portiert und umgewandelt (ohne Änderungen). Danach kommt es zu einem Stack overflow, wenn das Pogramm aufgerufen wird.

Ich habe danach Sharemem durch FastShareMem ausgetauscht und keine Änderung.

Hat jemand eine Idee, wie ich dies beseitige ?

Ciao

Alf

Christian Seehase 11. Jan 2003 14:12

Moin Alf,

hast Du denn mal geprüft, an welcher Stelle der Stack Overflow auftritt?

gfaw 11. Jan 2003 16:52

Tach auch,

schau mal in Deine Mailbox. Ich habe Dir das programm mal zugeschickt. Kannst Du herausfinden, warum es abstürzt. Ich habe leider nur wenig Erfahrung mit Delphi, machen sonst nur Java .....


Mille gracie

Alf

Christian Seehase 11. Jan 2003 18:55

Moin Alf,

würde ich ja prinzipiell gerne machen, aber wie Du meinem Profil entnehmen kannst (schau mal links von dieser Antwort), habe ich D5 und kein D7. Da wird's mit dem Test eines Programmes, das unter D6 läuft, aber nicht unter D7 etwas schwierig ;-)

gfaw 11. Jan 2003 19:23

Hi Christian,

schönen Gruß an die Waterkant. Hier im Südwesten schneit es gerade. Ich habe inzwischen den Debugger eingesetzt und habe die Stelle entdeckt, wo es zur einer "Speicherschutzverletzung" kommt. Der Debugger bleibt dann an der ersten Stelle der folgende Funktion stehen :


Delphi-Quellcode:
const
  EXPIRATION_DATE = '31.12.2004';

begin
  Application.Initialize;
  if now>StrToDate(EXPIRATION_DATE) then begin
    MessageDlg('Dieses Programm ist nur bis zum '+EXPIRATION_DATE+' lauffähig.'+#13+#10+
               'Bitte wenden Sie sich an lohn-ag.de, um ein Update zu erhalten!',
               mtError,[mbOK],0);
    Application.Terminate;
  end;
  if now>StrToDate(EXPIRATION_DATE)-14.0 then begin
    MessageDlg('Achtung, dieses Programm ist nur bis zum '+EXPIRATION_DATE+' lauffähig.'+#13+#10+
               'Bitte wenden Sie sich rechtzeitig an lohn-ag.de, um ein Update zu erhalten!',
               mtInformation,[mbOK],0);
  end;
  Application.Title := 'ZEIT@LOHN';
  Application.CreateForm(TfmMain, fmMain);
  Application.CreateForm(TfmKonfiguration, fmKonfiguration);
  Application.CreateForm(TfmMandant, fmMandant);
  Application.CreateForm(TfmSelectMitarbeiter, fmSelectMitarbeiter);
  Application.CreateForm(TqrStammdaten, qrStammdaten);
  Application.Run;
end.
Ich könnte natürlich den Quatsch abklemmen, aber ein Chef ist dann sehr böse. Ist dort etwas erkennbar ?

Ciao

Alf


[edit=Admin]Code-Tags eingefügt und Doppelposting entfernt. Mfg. Daniel[/edit]

Christian Seehase 11. Jan 2003 19:33

Moin Alf,

hab' ich das richtig verstanden?
Bleibt das Programm schon bei Application.Initialize hängen?

BTW: Ein Posting reicht ;-)

d3g 11. Jan 2003 19:36

Hi gfaw,

ich habe zwar kein Delphi 7, aber der Code, den du gepostet hast, kann eigentlich gar nicht einen Stack Overflow auslösen, weil nichts auf den Stack gelegt wird. Dies könnte höchstens beim Erstellen der Forms passieren, aber soweit ich weiß, werden Objekte auf den Heap gelegt (der Stack wäre auch ein seltsamer Aufbewahrungsort). Der Debugger bleibt jedoch bei einer CreateForm()-Zeile stehen, wenn im OnCreate-Ereignis des Formulars eine Exception ausgelöst wird. Wenn der Debugger an einer solchen Zeile stehenbleibt, poste doch einmal den Code in der OnCreate-Routine.

[edit]Ich brauche zu lange zum Tippen... Wie auch immer, was mir gerade eingefallen ist: vielleicht ist die Stackgröße unter Delphi 7 standardmäßig kleiner gestellt als unter Delphi 6, schau mal in den Projektoptionen nach und vergrößere den Stack gegebenenfalls.[/edit]

MfG,
d3g

gfaw 11. Jan 2003 20:17

Hallo, d3g,

die max. Stackgröße habe ich auf $01000000 gestellt (das entspricht 16777216 und ist die maximale Größe lt. Hilfe). Dennoch kommt das Problem; ich denke in einem Sub-Modul. Any idea ????

Ciao

Alf

gfaw 11. Jan 2003 21:26

Hi all,

ich habe nun das ganze Programm im Debugger und erhalten nun endlich eine Meldung, die uns vielleicht weiterhilft:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ZEIT_LOHN.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00006E69. Lesen von Adresse 00006E69'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Sagt dies jemand etwas ?

Ciao

Alf

Christian Seehase 11. Jan 2003 21:44

Moin Alf,

die Adresse liegt ja noch vor der Anwendung. Heap oder Stack.
Und der Fehler kommt auf exakt dem gleichen Rechner mit einer unter D6 kompilierten Version nicht?

Ist das eine Standalone EXE oder hängen da z.B. noch eigene DLLs o.ä. dran?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz