![]() |
Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Moin,
ich hätte hier mal ein Problem wo ich Tipps gebrauchen könnte. Ich habe ein Programm, an dem ich zur Vorversion einige Änderungen durchgeführt habe. Dieses Programm hat weiterhin eine Anmeldemaske, bei der man auch direkt wieder abbrechen und es damit schließen kann. Mir ist beim Kompilieren nun zufällig aufgefallen, dass, wenn ich das Programm direkt in der Anmeldemaske schließe, das Programmsymbol in der Taskleiste unten verschwindet, dann aber direkt nochmal das Programm wieder in der Taskleiste aufploppt, nur ohne Icon, und nach paar Sekunden entweder wieder verschwindet, oder aber auch häufig folgenden Fehler schmeißt: Zitat:
Geschlossen wird das Programm über Application.Terminate, was auch problemlos ausgeführt wird. Das Problem manifestiert sich also irgendwo in den abschließenden Operationen der Windows-API, die ja vom Terminate ausgelöst werden. Das Problem ist unabhängig vom PC nachvollziehbar und tritt mit der Programmvorversion (selbe Delphi-Version) nicht auf, also habe ich es in irgendeiner Form hineingebaut. Eine genauere Beschreibung kann ich leider nicht geben, da ich in der Version einiges, aber nichts technisch außergewöhnliches, gemacht habe und momentan keinen Anhaltspunkt dafür habe, was das ausgelöst haben könnte. Hat jemand Ahnung bzw Erfahrung damit, was solch einen Fehler für gewöhnlich auslösen kann? Ich sehe diesen nämlich zum ersten Mal und das Internet liefert mir viel zu viele Möglichkeiten, die aber nicht hierzu passen. |
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Bekommst du den Fehler im Debugger nicht? Dort solltest du ja mehr sehen können, insbesondere den Stacktrace.
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Damit habe ich eben mal etwas herumprobiert.
Im Debugger bekomme ich nicht immer dasselbe, aber beim am häufigsten auftretenden Fehler hält er tief in der CPU. Der Stacktrace sieht in diesem Fall von oben nach unten mehr oder weniger folgendermaßen aus: Zitat:
Ergänzung: Wegen Optimierung kann ich im Debugger leider keine genaueren Information dazu sehen, was da genau passiert, wie z.B. welche WinControl etc das ist. |
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Hast du die Debug-DCUs eingeschaltet? Falls nicht, mach das mal, dann landest du ggf. an einer aussagekräftigeren Stelle und kannst dich besser an die Stelle in deinem Code hangeln, wo das Problem auftritt.
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Debug-DCUs sind angeschaltet.
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Deaktiviere am besten mal testweise die Styles.
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Mit deaktivierten Styles tritt das Problem immer noch auf, war also ein Folgefehler; die Exception, bei der er im Debugger anhält, ist jedoch anders.
Anhalten tut er natürlich in der CPU, der Stack sieht aber dann folgendermaßen aus: Zitat:
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Hey, nach dem was du beschreibst würde ich darauf tippen das ein anderer Thread nicht mitbekommen hat dass der Main Thread nicht mehr existiert und noch fröhlich Daten sendet.
Das kann immer passieren. Deshalb sollte jeder Thread ein ordentliches Fehlerhandling haben damit das nicht bis ins System durchrauscht. Application.Terminate ist generell keine Lösung zum geregelten Beenden eines Programms. |
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Zitat:
|
AW: Die Anweisung in [...] verwies auf Arbeitsspeicher bei [...]
Zitat:
Zitat:
Abgesehen davon, Terminate wird nur zum Schließen bei der Anmeldung verwendet, ansonsten läuft es über die Hauptform. Was wäre denn in diesem Fall die bessere Option? Terminate ist doch eine sehr sanfte Option zum codeseitigen Schließen des Programmes. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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