AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fehler beim Programm beenden
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Programm beenden

Ein Thema von Jens Hartmann · begonnen am 19. Okt 2015 · letzter Beitrag vom 15. Nov 2015
 
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Fehler beim Programm beenden

  Alt 20. Okt 2015, 05:21
Ich glaube, dass das ganze mit der Komponente VirtualStringTree zu tun hat. In der OnCloseQuery gebe ich das VST frei und irgendwie habe ich die Vermutung, das der Fehler dabei auftreten tut. Nach der Fehlermeldung ist der VST nicht mehr sichtbar und die Anwendung ansonsten noch offen. Außerdem verwende ich in der VST Objekte.
Wenn du den VirtualStringTree (VST) nicht selbst erzeugst, darfst du ihn auch nicht selbst freigeben. Legst du einen VST auf die Form, erhält dieser automatisch die Form als Eigentümer (Owner) und wird somit automatisch freigegeben, wenn die Form freigegeben wird. Mit irgendwelchen Objekten, die du dem VST zuweist, ist es ähnlich: Du mußt feststellen, ob diese Objekte beim Zerstören des VST ebenfalls zerstört werden und wenn nicht, diese Objekte zuerst freigeben.

Im Übrigen sollte man Freigaben niemals im OnCloseQuery machen, sondern immer im OnDestroy, weil erst im OnDestroy sichergestellt ist, daß die Zerstörung nun wirklich begonnen hat und auch durchgeführt wird. So könnte im OnClose, das nach OnCloseQuery aufgerufen wird (wenn CanClose = True), auch etwas anderes als das caFree vereinbart werden oder worden sein; der Standard-Wert ist nämlich caHide. Nur wenn die zu schließende Form auch die Mainform ist, wird bei OnClose automatisch caFree aufgerufen.

Um genau herauszufinden, wo diese ominösen Memory-Leaks entstehen, wäre es zielführend, das Programm-Ende ein- oder mehrmals sorgfältig durchzusteppen. Beim letzten meiner Kunden, der dieses Problem hatte, wurde in seiner vollkommen undurchschaubaren Anwendung mehrfach OnClose oder OnDestroy aufgerufen, was sich natürlich fatal auf die saubere Beendigung des Programms auswirkt. Oft werden bei älteren Anwendungen auch massenweise Hinweise und Warnungen mitgeschleppt und ignoriert (besagter Kunde erzeugte bei jedem Kompilierungsvorgang mehrere Hundert!). Da muß man sich einfach die Zeit nehmen, das einmal in aller Ruhe zu bereinigen. Häufig erledigen sich dadurch bereits zahlreiche Fehlerquellen, vor allem beim Beheben von Warnungen über nicht initialisierte Variablen.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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