![]() |
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 |
Moin Alf,
hast Du denn mal geprüft, an welcher Stelle der Stack Overflow auftritt? |
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 |
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 ;-) |
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:
Ich könnte natürlich den Quatsch abklemmen, aber ein Chef ist dann sehr böse. Ist dort etwas erkennbar ?
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. Ciao Alf [edit=Admin]Code-Tags eingefügt und Doppelposting entfernt. Mfg. Daniel[/edit] |
Moin Alf,
hab' ich das richtig verstanden? Bleibt das Programm schon bei Application.Initialize hängen? BTW: Ein Posting reicht ;-) |
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 |
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 |
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 |
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? |
Moin, Chris,
es handelt sich um eine EXE, die folgende DLLs benötigt : borlndmm.dll / MDACAccessDLL.dll / qtintf70.dll Die MDACAccessDLL.dll ist eine selbsterstelle, die DB - Zugriffe regelt und vom ehemaligen Programmierer stammt, der sich abgesetzt hat. Ich habe langsam den Verdacht, daß er uns ein Ei ins Netz gesetzt hat. Soll ich Dir die DLL mal schicken ? Ciao Alf (aus dem wilden Süden !!!) |
Moin Alf,
aha, borlndmm und qtintf70 sind hier im Forum im Moment heiss gehandelte Themen ;-) Such am Besten mal nach diesen Begriffen, und Du solltest dazu passende Postings vom heutigen Tage finden. |
Hi all,
ich habe inzwischen FASTShareMem als Übeltäter ausgemacht. Kaum war es entfernt, lief die Anwendung !!! Vielen Dank an alle !! Ciao Alf :witch: [edit=Daniel B]Dreifach-Post gelöscht! Geh Bitte etwas sorgfältiger mir dem Absenden-Button um, das tut dem kleinen Kerl doch weh. MfG Daniel B.[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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-2025 by Thomas Breitkreuz