![]() |
Re: TStringList Freigeben erzeugt Exception
Ich schlage folgende Änderungen vor:
Delphi-Quellcode:
Wenn dein Programm im integrierte Debugger läuft, dann hält der Debugger mit INT 3 an der Stelle an,
procedure TdamScaDatabase.DataModuleDestroy(Sender: TObject);
begin //SLTaetigkeiten.Free; //SLTaetigkeiten := nil; FreeAndNil(SLTaetigkeiten); // <==== Objekt ggf. freigeben und Zeiger auf nil setzen end; if not Query.Eof then begin Query.First; while not Query.Eof do begin if not Assigned(SLTaetigkeiten) then asm INT 3 end else SLTaetigkeiten.Add(Query.FieldByName('KOSTSTELLE').AsString); Query.Next; end; end; an der du auf die freigegebene Stringliste zugreifen möchtest. So kannst du dann z.B. den Aufrufstack dir anzeigen und herausfinden warum der Zugriff erfolgt, obwohl doch gar nicht erlaubt. |
Re: TStringList Freigeben erzeugt Exception
Hi Leute,
bin leider erst jetzt wieder dazu gekommen, hier mal wieder nachzuschauen. @RavenIV: Auch bei meinen vorherigen Versuchen (ohne das auskommentieren) habe ich das Projekt jeweils neu erzeugt. Das hatte da leider nicht funktioniert. @Shmia: Das Problem ist ja imho nicht die Zeile, wo ich die Stringliste fülle. Das klappt ja alles. Das Problem war, dass beim schließen der Anwendung die AV kam. Deinen Code speicher ich mir trotzdem mal weg, der könnte sicherlich nochmal nützlich sein :) Ich glaube jetzt auch erstmal an nen Fehler im Compiler/Delphi, bis mich einer eines besseren belehrt. Grüße und Danke an Alle angos |
Re: TStringList Freigeben erzeugt Exception
Zitat:
Da passiert zunächst vielleicht gar nichts, nur der Heap ist "versaubeutelt". Erst wenn beim Programmende der Reihe nach aller Speicher freigegeben wird, dann knallts. Die Stelle, an der es knallt steht mit dem eigentlichen Bug nicht in Verbindung. Vorgehensweise: das Programm wird so lange abgespeckt (Funktions- und Prozeduraufrufe auskommentieren), bis der Fehler nicht mehr auftritt. Dann nach Sherlock Homes Manier einkreisen. |
Re: TStringList Freigeben erzeugt Exception
Wo ist denn die Stringliste deklariert? Im Datenmodul oder in einer anderen unit?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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