Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletztung ohne grund - ratlos.. (https://www.delphipraxis.net/99549-zugriffsverletztung-ohne-grund-ratlos.html)

s-off 14. Sep 2007 06:59

Re: Zugriffsverletztung ohne grund - ratlos..
 
Dominik hat schön die allgemeine Syntax beschrieben.

Hier noch ein Beispiel mit einer TStringlist, welche im OnCreate Deiner Mainform erzeugt, und im OnDestroy Deiner Mainform wieder freigegeben wird.

@Dominik
Möchte Dir nicht reinpfuschen - nur ist ein Beispiel, welches auf den aktuellen Fall zugeschnitten ist, für manche einfacher zu verstehen. Das allgemeine Vorgehen ist natürlich noch wichtiger.

Delphi-Quellcode:
Unit Unit1;

Interface

Uses
   Windows,
   Messages,
   SysUtils,
   Variants,
   Classes,
   Graphics,
   Controls,
   Forms,
   Dialogs;

Type
   TForm1 = Class(TForm)
      Procedure FormCreate(Sender: TObject);
      Procedure FormDestroy(Sender: TObject);
   private
      lstMeineStringlist: TStringlist; //Deklaration unserer zukünftigen Instanz einer TStringlist
   End;

Var
   Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.FormCreate(Sender: TObject);
Begin
   lstMeineStringlist := TStringList.Create; //Die Stringliste erzeugen
End;

{
[...]
Hier stehen die Methoden, in denen mit der Stringliste gearbeitet wird.
[...]
}

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
   FreeAndNil(lstMeineStringlist); //Die Stringliste wieder freigeben
End;

End.

Tommy0014 14. Sep 2007 12:25

Re: Zugriffsverletztung ohne grund - ratlos..
 
ah ok danke, werd ich mal ausprobieren, aber noch eine frage was bringt mir das freigeben einer tstringlist?


mfg
tommy

dominikkv 14. Sep 2007 12:51

Re: Zugriffsverletztung ohne grund - ratlos..
 
@s-off: kein problem :cheers:

@Tommy0014:
mit dieser anweisung:
Delphi-Quellcode:
lstMeineStringlist := TStringList.Create;
reservierst du speicher auf dem heap der von der Stringlist benutzt wird.
wenn du die Stringliste nicht mehr brauchst kannst du den speicher freigeben, damit andere programme (oder dein programm) diesen speicher wieder benutzen kann und anschließend mit "Destroy" freigegeben wird.
Dies kannst du mit dem destruktor "Destroy" machen, allerdings ist es sicherer den speicher mit "free" freizugeben da bei "free" zuerst geprüft wird ob überhaupt speicher da ist den man freigeben kann.

mit
Delphi-Quellcode:
lstMeineStringlist.Free
wird er also freigegeben, allerdings "zeigt" lstMeineStringlist immernoch auf den Platz wo der speicher früher war. besser ist also
Delphi-Quellcode:
FreeAndNil(lstMeineStringlist)
zu verwenden, da hier noch zusätzlich der Zeiger auf NIL (= Not In List) gestellt wird.

Tommy0014 14. Sep 2007 13:44

Re: Zugriffsverletztung ohne grund - ratlos..
 
ah ok danke, weil ich dachte was bringt mir das nun versteh ich es... danke an euch :thumb: :thumb: :thumb:

mfg
tommy


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

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