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 EAccesViolation beim Zugriff auf ini (https://www.delphipraxis.net/109551-eaccesviolation-beim-zugriff-auf-ini.html)

Fussball-Robby 3. Mär 2008 14:18


EAccesViolation beim Zugriff auf ini
 
Hey,
ich lade aus einer ini mit folgendem code einige Einstellungen:

Delphi-Quellcode:
procedure load;
Var ini:TIniFile;
    fname:string;
    i,count:integer;
begin
  fname:=Unit1.sDir+'main.ini';
  form1.listbox1.clear;
  ini:=TIniFile.create(fname);
  try
     count:=ini.readinteger('main','forms',0);
     if count >0 then do
        for i:=1 to count do
           form1.listbox1.items.add(ini.readstring('main','form'+inttostr(i),''));
  finally
     ini.free;
  end;
end;
Dabei bekomme ich die Fehlermeldung "EAccesViolation". Ich weiß, dass das bedeutet, dass ich auf Speicher zugreife, der nicht existiert oder so ähnlich, aber in anderen Prozeduren greife ich genau so auf die gleiche Datei zu. In den anderen Prozeduren benutze ich allerdings keine Schleife. Kann das damit was zu tun haben?

Hoffe, ihr könnt mir helfen

Auf Code-Suche 3. Mär 2008 14:22

Re: EAccesViolation beim Zugriff auf ini
 
Hallo,

nachdem du die Listbox clearst, ist der Speicher freigegeben und du kannst nicht mehr drauf zugreifen.
Ersetze den Befehl form1.listbox1.clear; durch form1.listbox1.items.text := ''; Dann sollte es gehen.

Fussball-Robby 3. Mär 2008 14:25

Re: EAccesViolation beim Zugriff auf ini
 
Erstmal Danke für die Hilfe, aber mit
Delphi-Quellcode:
form1.listbox1.items.text:='';
funktioniert es auch nicht. Selbst wenn ich die ganze Zeile rausnehme, kommt der Fehler

Xong 3. Mär 2008 14:26

Re: EAccesViolation beim Zugriff auf ini
 
Zitat:

Zitat von Auf Code-Suche
nachdem du die Listbox clearst, ist der Speicher freigegeben und du kannst nicht mehr drauf zugreifen.
Ersetze den Befehl form1.listbox1.clear; durch form1.listbox1.items.text := ''; Dann sollte es gehen.

Zitat:

Mit Clear können Sie alle Einträge des Listenfeldes in einem Schritt löschen. Obwohl die Einträge eines Listenfeldes standardmäßig vom Typ TStrings sind, verwenden Sie die Methode Clear der Liste anstelle der Methode Clear der Eigenschaft Items. Dadurch können Nachkommen von TCustomListBox alle weiteren erforderlichen Löschvorgänge zusätzlich zum Löschen der Einträge aus der Eigenschaft Items in der Methode Clear ausführen. Daher sollten Anwendungen

ListBox1.Clear;

anstelle von

ListBox1.Items.Clear;

verwenden.

@Robby: in welcher Zeile erscheint die Meldung und welchen Wert hat i zu diesem Zeitpunkt?

Bernhard Geyer 3. Mär 2008 14:27

Re: EAccesViolation beim Zugriff auf ini
 
Ich tipp mal drauf das form1 undefiniert ist.

Bau deine Funktion um so das du mit TStrings arbeitest und nicht auf irgendwelche globale Formularvariablen die evtl. in einem anderen Projekt standardmäßig erzeugt wurden.

DeddyH 3. Mär 2008 14:31

Re: EAccesViolation beim Zugriff auf ini
 
Außer einem do zuviel:
Delphi-Quellcode:
if count >0 then do
fällt mir jetzt erstmal nichts auf. In welcher Zeile kommt denn der Fehler?

Fussball-Robby 3. Mär 2008 14:34

Re: EAccesViolation beim Zugriff auf ini
 
Das ist grade das Problem, es wird weder eine Zeile markiert noch irgendein anderer Hinweis darauf gegeben, wo der Fehler auftritt. Ich nehme jetzt mal die anderen Sachen nach und nach da raus, vielleicht finde ich dann die Stelle

Fussball-Robby 3. Mär 2008 14:44

Re: EAccesViolation beim Zugriff auf ini
 
Sorry, mal wieder ein dummer Fehler :wall: :wall: :wall: Die Variable sDir war zu dem Zeitpunkt noch nicht gesetzt... :oops:

Bernhard Geyer 3. Mär 2008 14:54

Re: EAccesViolation beim Zugriff auf ini
 
Zitat:

Zitat von Fussball-Robby
Sorry, mal wieder ein dummer Fehler :wall: :wall: :wall: Die Variable sDir war zu dem Zeitpunkt noch nicht gesetzt... :oops:

Wenn man halt globale Variablen en Mass verwendet passiert sowas zwangsläufig.

Fussball-Robby 3. Mär 2008 15:01

Re: EAccesViolation beim Zugriff auf ini
 
Falls es dich interessiert, das ist meine einzige Globale Variable :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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-2025 by Thomas Breitkreuz