Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit TStrings/TStringlist beim Freigeben (https://www.delphipraxis.net/76596-probleme-mit-tstrings-tstringlist-beim-freigeben.html)

xZise 6. Sep 2006 20:55


Probleme mit TStrings/TStringlist beim Freigeben
 
Ich habe folgenden Code geschrieben:

Delphi-Quellcode:
ShowModal;
if Files <> nil then
  Files.Free;
Files := TStringList.Create;
Problem: Es kann sein (aus unerklärenlichen Gründen), dass er (die Form wird weiterhin angezeigt), dass er in das "if Files <> nil then" springt. Weiter nicht schlimm, aber dort knallst dann:

Code:
---------------------------
Debugger Exception Notification
---------------------------
Project XXXXXXXX.exe raised exception class EAccessViolation with message 'Access violation at address 0044B150 in module 'XXXXXXXX.exe'. Read of address 00000004'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help  
---------------------------
Ich weiß leider nicht, wo das Problem sein könnte...

(Files ist deklariert :D)

Bernhard Geyer 6. Sep 2006 20:57

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Verwende mal FastMM. Der sollte dir (bei aktiven Debug und TD32-Infos) anzeigen wenn das Objekt schon irgendwo anders freigegeben wurde.

mkinzler 6. Sep 2006 21:00

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Wo steht dieser Code? (Welche Methode, welcher Klasse)

katjah 6. Sep 2006 21:23

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Läuft Dein Programm da mehrfach durch und es knallt erst beim 2. Durchlauf ?
Das liegt dann vermutlich daran, daß
Delphi-Quellcode:
Files.Free;
Files nicht auf nil setzt.

Du könntest dann stattdessen
Delphi-Quellcode:
FreeAndNil(Files)
verwenden.

xZise 6. Sep 2006 21:32

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Zitat:

Zitat von Bernhard Geyer
Verwende mal FastMM. Der sollte dir (bei aktiven Debug und TD32-Infos) anzeigen wenn das Objekt schon irgendwo anders freigegeben wurde.

Installiere ich morgen.


Zitat:

Zitat von mkinzler
Wo steht dieser Code? (Welche Methode, welcher Klasse)

Methode : Execute
Klasse : frmOp


Zitat:

Zitat von katjah
Läuft Dein Programm da mehrfach durch und es knallt erst beim 2. Durchlauf ?
Das liegt dann vermutlich daran, daß
Delphi-Quellcode:
Files.Free;
Files nicht auf nil setzt.

Du könntest dann stattdessen
Delphi-Quellcode:
FreeAndNil(Files)
verwenden.

Keine Änderung!

Kann es sein (rein theoretisch), dass während des ShowModals ein Fehler auftritt und er aber nur "if Files..." markiert?
Ich teste es mal ;)

katjah 6. Sep 2006 23:03

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Ansonsten wäre etwas mehr Code nicht schlecht.

3_of_8 6. Sep 2006 23:25

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Free funktioniert auch bei nicht instantiierten Objekten. Der Grund liegt auf der Hand.

Muetze1 7. Sep 2006 00:11

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Zitat:

Zitat von 3_of_8
Free funktioniert auch bei nicht instantiierten Objekten. Der Grund liegt auf der Hand.

Man sollte dazu aber erwähnen, dass Free nur dann ordentlich mit nicht-instanziierten Objekten funktioniert, wenn entweder eine gültige Instanzenadresse in der Variablen enthalten ist oder Nil. Bei allem anderen knallt es auch mit Free - ausser man hat ein wenig Glück und der Sprung in's Datennirvana beim Aufruf vom Destruktor landet irgendwo bei was kompatiblen...

fwsp 7. Sep 2006 00:29

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
versteh ich es falsch oder könnte man nicht mit .Clear das Problem umgehen?

Bernhard Geyer 7. Sep 2006 07:14

Re: Probleme mit TStrings/TStringlist beim Freigeben
 
Zitat:

Zitat von fwsp
versteh ich es falsch oder könnte man nicht mit .Clear das Problem umgehen?

Für diesen 3-Zeiler allein: Ja. Aber das Problem liegt doch woanders das Files eine ungültige Referenz darstellt. Und dann Knallt es auch bei Clear.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz