Autor Beitrag
P@u1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: Mo 20.09.10 19:11 
Hallo,

ich habe eben ein neues Programm angefangen, das eine Unit von mir weiterverwendet, aber ansonsten hat es kaum Inhalt.
Es trat folgendes Problem auf:
Beim beenden (durch Klicken auf das Kreuz rechts oben) tritt eine Windows-Fehlermeldung auf:
"VisualCardSorter.exe funktioniert nicht mehr"
Das Programm selbst ist ziemlich simpel, es läd ein paar Bilder und zusätzliche Attribute rein über als Dateien gespeicherte Filestreams.
Ich benutze Windows 7.
Eigentlich hatte ich vermutet, dass schon wer anders dieses Problem gehabt hatte, aber mit der Suchfunktion (z.B. nach funktioniert nicht mehr) finde ich nix gutes, weil es begriffe sind, die zu oft vorkommen.
Mit der Kategorie war ich mir auch nicht ganz sicher, aber weil es sich um eine Windows-Fehlermeldung handelt (Delphi selbst hat nicht gemotzt), hab ich es vorerst mal hier einsortiert.
Übrigens: Ich habs dann mal öfters versucht, dass Programm auszuführen, sowohl aus der IDE als auch direkt über die Exe, meistens trat der Fehler auf, aber in seltenen Fällen kam er mal nicht... ich versteh nicht woran das liegt.
Hab irgendwo gehört, dass sowas kommt, wenn "nicht richtig aufgeräumt wurde", deswegen hab ich zur Sicherheit bei OnFormCloseQuery nochmal alles freigegeben (obwohl ich eigentlich davon ausging, dass beim beenden eines Programms automatisch alle erzeugten Elemente freigegeben werden?!), hat aber auch nichts geändert.

Vielen Dank schonmal für eure Hilfe.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1748

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 20.09.10 20:12 
Das Problem kann zum Beispiel sein, dass du auf das Verzeichnis zugreifst, in dem deine Exe liegt oder ähnliches. Wenn du da keine Schreibrechte hast, kann genau das das Resultat sein.

Ja, dann kann es noch ein Speicherproblem sein. Vielleicht überschreibst du irgendwo Speicher, so dass später auf falsche Speicherbereiche zugegriffen wird.
Hier hilft es zur Prüfung z.B. die Bereichsüberprüfung in den Compileroptionen deiner Projektoptionen testweise einzuschalten und das Projekt neu zu erzeugen. Dann werden entsprechende Warnungen angezeigt.

Zur Fehlerdiagnose kann auch madExcept helfen. Außerdem kannst du im Projektquelltext ReportMemoryLeaksOnShutdown auf True setzen, dann werden dir nicht freigegebene Speicherbereiche angezeigt.

Allgemein ein Hinweis:
Oft tritt der Fehler auf, wenn Fehler nicht korrekt behandelt werden. Wenn eine Exception nicht behandelt wird (Stichwort try..finally und try..except), zieht Windows ggf. die Notbremse.
P@u1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: Mo 20.09.10 22:22 
Ich hab gemerkt, dass sich im Stream ein String befand, von dem nur die Adresse gespeichert wurde, ich behebe das ganze mal, vielleicht hatte es ja damit zu tun.
Vielleicht wollte er dann beim Freigeben immer die Adresse die eingespeichert war freigeben und wenn da zufällig was anderes war, gefällt das windows bestimmt nicht so sehr und dann kommt die Meldung, so erklär ich mir es zumindest^^
Ich hoffe mal, dass es mit der Änderung funktionieren wird.
Danke auf jeden Fall für deine Tipps!
Edit: Habs geändert, selbes Problem ist immer noch aktiv....