Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Runtime Error 217 beim Beenden des Programmes?

  Alt 15. Aug 2006, 18:04
Zitat von winx:
ich hab schon mnal gedebuggt und der fehler trat hier auf:

Delphi-Quellcode:
begin

  Application.Initialize;
  ...
  Application.CreateForm(Ttoolformdistributeangle, toolformdistributeangle);
  Application.Run; // Hier alles OK
end. // <- Nachdem ich hier F8 gedrückt habe (beim Debuggen) tritt der fehler auf
Nun ja, dass ist schon klar, aber an irgendeiner Stelle wird halt ein TThemeService Objekt explizit freigegeben (.free oder .destroy), das aber schon freigegeben wurde (oder nie initialisiert). Nach FastMM wurde es ja schon explizit freigegeben. Es kann sein, dass du hier einerseits den Owner zugewiesen hast und andererseits irgendwo .free aufgerufen wird.

Zitat von winx:
Hat es irgendwas mit der Klasse TThemeService zu tun? Ist halt ne Borland KLasse, oder????
TThemeService sagt mir als Klasse nichts, weiß nicht ob die von Borland kommt oder nicht, hat aber damit nichts zu tun.
Du solltest dir einfach mal alle Instanzen dieser Klasse in deinem Projekt anschauen. Wird irgendwo Free oder Destroy von diesen Klassen aufgerufen?
Wenn du eine Komponente auf dem Form platzierst (zur Designzeit) oder manuell erstellst (zur Laufzeit) und einen Owner zuweist, so sorgt der Besitzer selbst für die Freigabe. Wird der Owner freigegeben, wird für alle bekannten Kinder deren Free aufgerufen. Dabei wird zwar die Instanz frei gegeben, dass Objekt also aus dem Speicher entfernt, die Adresse aber nicht geändert. In einer Variable von einem Klassentyp wird nur die Adresse des Objekts im Speicher gespeichert. Ist diese nicht nil (0x00000000), so denkt Delphi dass dieses Objekt noch existiert. Ja, wurde es schon mit Free freigegeben hast du also ein Problem.

Zitat von winx:
Gibt es ein Tool, das solche Fehler im Programme erkennt, also nichtinitialiserte Variablen, die freigegeben werden?
Ja, der Delphi-Compiler. Du solltest beim Compilieren eine Liste mit Hinweisen und Warnungen bekommen, wenn es mögliche Schwachstellen in deinem Code gibt. Hier findest du auch, dass eine Variable möglicherweise nicht initialisiert wurde.
  Mit Zitat antworten Zitat