Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm korrekt beenden? (https://www.delphipraxis.net/44065-programm-korrekt-beenden.html)

Gina 12. Apr 2005 22:46


Programm korrekt beenden?
 
Hallochen,

ich hab immernoch das Problem, dass ich beim Beenden meines Programms eine Exception bekomme. Das Ganze passiert in TObject.Free. Daher gehe ich davon aus, dass er irgendwie die ganzen Komponeten/Formulare nicht freigeben kann, bevor der HauptThread geschlossen wird. Daher hatte ich es mit einer Verzögerung in OnCloseQuery probiert, wo die Messages abgearbeitet werden. Das schien auch super zu klappen, bis ich nebenbei ein anderes Programm laufen ließ, das CPU-Last verursacht.

Daher meine Frage: Wie beende ich korrekt das Programm? Wie warte ich "anständig", bis er alles brav geschlossen hat? Oder hab ich wirklich irgendwo etwas vergessen selbst freizugeben?

Ich danke Euch ganz dolle, Gina.

Christian Seehase 12. Apr 2005 22:52

Re: Programm korrekt beenden?
 
Moin Gina,

es könnte auch sein, dass Du irgendwo Speicher überschreibst, so dass Object.Free auf eine ungültige Adresse zugreift.

Hast Du Rangechecking aktiviert?
Zumindest zum Testen wäre das evtl. ganz sinnvoll.

Gina 12. Apr 2005 22:59

Re: Programm korrekt beenden?
 
Hallo,

hatte ich bisher aus. Ich habs mal eben eingeschaltet. Zweimal ist nix passiert und beim dritten Mal kam wieder die Exception in TObject.Free. Wenn ich irgendwo Speicher überschreibe, hätte die Fehlermeldung doch anders aussehen müssen, oder?

Big Thx, Gina.

Christian Seehase 13. Apr 2005 01:07

Re: Programm korrekt beenden?
 
Moin Gina,

eigentlich schon. :gruebel:

Verwendest Du irgendwo Pointer (z.B. auch in Verbindung mit PChar)?
Da würde eine Bereichsprüfung nicht zuschlagen.

Gina 13. Apr 2005 20:16

Re: Programm korrekt beenden?
 
Hi,

ja, Pointer verwende ich auch. Ich habe schon so ziemlich alle Routinen nach und nach rausgenommen bin die Units fast leer waren, werde die Exception aber nicht los... *grml*

Ich laß jetzt mal den Debugger wüten...

Bis dann, und thx, Gina.

Gina 13. Apr 2005 22:54

Re: Programm korrekt beenden?
 
Also... Laut Debugger bleibt er in der ShellCtrls an folgender Stelle hängen:

Delphi-Quellcode:
procedure TCustomShellTreeView.Delete(Node: TTreeNode);
begin
  if Assigned(Node.Data) then
  begin
    TShellFolder(Node.Data).Free;
    Node.Data := nil;
  end;
  inherited Delete(Node);
end;

(*
procedure TCustomShellTreeView.NodeDeleted(Sender: TObject; Node: TTreeNode);
begin
  if Assigned(Node.Data) then
  begin
    TShellFolder(Node.Data).Free;
    Node.Data := nil;
  end;
end;
(**)
Wie man sieht, gibt es da schon zwei Varianten im Quellcode... Aber jetzt bin ich einfach zu müde, um mir darüber noch Gedanken machen zu können. Bis morgen, schlaft schön...

Gina.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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