Autor Beitrag
the-kecks
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Sa 07.03.09 22:09 
hi, ich schon wieder^^
ich habe mal wieder ein problem. bei mir kommt immer eine EAccessviolation bei einer pos abfrage obwohl das in eine stringlist geladene file was mittels pos durchsucht wird existiert und die stringlist korrekt geladen/createt worden ist -.-
Debugger:
Erste Zufalls-Exception bei $7555F35F. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 7683787C in Modul 'RPCRT4.dll'. Schreiben von Adresse BE6606E4'. Prozess Project1.exe (4752)
code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TForm1.Button1Click(Sender: TObject);
var
filetxt : Tstringlist;
i2 : Integer;
str : String;
begin
//...
Dateipfad:=edit1.Text;
str:=edit2.Text;
filetxt:=TStringList.Create;
if pos('.txt', Dateipfad) >0 then
begin
 if FileExists(Dateipfad) then
 begin
  filetxt.LoadFromFile(Dateipfad);
   for i2:=0 to filetxt.count do
    if pos(str, filetxt[i2]) >0 then //hier entsteht wohl der fehler
     begin
       antwort:=edit2.text;
       filetxt.free;
     end
       else
       begin
        antwort:='NG';
        Filetxt.free;
        end;
       end;
       end
       else
        begin
         showmessage('Datei wurde nicht gefunden!');
         exit;
        end;

mfg
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 07.03.09 22:18 
Hallo

es muß

ausblenden Delphi-Quelltext
1:
for i2:=0 to filetxt.count-1 do					


ausblenden Delphi-Quelltext
1:
if pos(str, filetxt[i2]) >0 then //hier entsteht wohl der fehler					

jain,

Du gibst die stringliste immer wieder frei -> beim nächsten Schleifendurchlauf ist sie nicht mehr existent und führt zur AV.
Das free gehört ans Ende (wo du nicht mehr auf die Stringliste zugreifst ) und in einen try-finally-Block. Von der struktur her kannst du auch auf das exit verzichten.

deine Einrückung zum letzten else-Zweig ist für mich nicht vorteilhaft.

Gruß Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Sa 07.03.09 22:50 
danke! aber jetz kriege ich "listenindex überschreitet das maximum(0)" obwohl doch eigentlich alles korrekt geladen wurde (oder?).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
if pos('.txt', Dateipfad) >0 then
begin
 if FileExists(Dateipfad) then
 begin
 filetxt.LoadFromFile(Dateipfad);
   for i2:=0 to filetxt.count-1 do //hier liegt wahrscheinlich der fehler
    if pos(str, filetxt[i2]) >0 then
     begin
       antwort:=edit2.text;
     end
       else
       begin
        antwort:='NG';
       end;
    end;
 end
 else
 begin
  showmessage('Datei wurde nicht gefunden!');
  exit;
 end;

PS: es funzt auch ohne -1 ;)

mfg
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Sa 07.03.09 23:10 
user profile iconthe-kecks hat folgendes geschrieben Zum zitierten Posting springen:

PS: es funzt auch ohne -1 ;)

Manchmal schon, zumindest so lange man nur lesend auf den nicht allozierten Speicher zugreift (was Du definitiv machst, wenn Du bis .Count auf die TStringList zugreifst).

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.03.09 23:15 
user profile iconthe-kecks hat folgendes geschrieben Zum zitierten Posting springen:
danke! aber jetz kriege ich "listenindex überschreitet das maximum(0)"
Das heißt, dass der Index 0 schon höher als der maximale Index ist. Also ist kein Eintrag in der StringList.
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Sa 07.03.09 23:24 
ja das ist mir klar aber ich habe das file doch auf jedenfall geladen weil ich ja das mit "if FileExists(Dateipfad) then" eingefügt hab.

mfg
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: So 08.03.09 01:26 
hab das problem selbst gelöst

mfg
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: So 08.03.09 02:56 
user profile iconthe-kecks hat folgendes geschrieben Zum zitierten Posting springen:
hab das problem selbst gelöst

Darf man fragen was "geklemmt" hat. U.U. hat jemand anderes ein ähnliches Problem.. Du wärst auch froh, wenn Du die Lösung zu Deinem Problem über eine simple Suchanfrage im Forum gelöst bekommen würdest, oder? Dann hilft ein Beitrag wie "OK, hat sich erledigt, funzt" nicht wirklich...

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: So 08.03.09 03:23 
user profile iconthe-kecks hat folgendes geschrieben Zum zitierten Posting springen:
danke! aber jetz kriege ich "listenindex überschreitet das maximum(0)" obwohl doch eigentlich alles korrekt geladen wurde (oder?).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
if pos('.txt', Dateipfad) >0 then
begin
 if FileExists(Dateipfad) then
 begin
 filetxt.LoadFromFile(Dateipfad);
   for i2:=0 to filetxt.count-1 do //hier liegt wahrscheinlich der fehler
    if pos(str, filetxt[i2]) >0 then
     begin
       antwort:=edit2.text;
     end
       else
       begin
        antwort:='NG';
       end;
    end;
 end
 else
 begin
  showmessage('Datei wurde nicht gefunden!');
  exit;
 end;

PS: es funzt auch ohne -1 ;)

mfg

hier der richtige code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
if pos('.txt', Dateipfad) >0 then
begin
 if FileExists(Dateipfad) then
 begin
 filetxt.LoadFromFile(Dateipfad);
   for i2:=0 to filetxt.count-1 do
   begin //added
    if pos(str, filetxt[i2]) >0 then
     begin
       antwort:=edit2.text;
     end
       else
       begin
        antwort:='NG';
       end;
    end;
   end//added
 end
 else
 begin
  showmessage('Datei wurde nicht gefunden!');
  exit;
 end;

mfg
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: So 08.03.09 03:47 
Muchas Gracias! :D

Tja, was eine ordentliche Code-Formatierung (oder gExperts) alles aus macht. Da sieht man ein fehlendes end auf den ersten Blick.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 08.03.09 04:46 
Ich rücke die beiden Versionen einmal richtig ein. Alte Version:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
if pos('.txt', Dateipfad) >0 then
begin
  if FileExists(Dateipfad) then
  begin
    filetxt.LoadFromFile(Dateipfad);
    for i2:=0 to filetxt.count-1 do //hier liegt wahrscheinlich der fehler
      if pos(str, filetxt[i2]) >0 then
      begin
        antwort:=edit2.text;
      end
      else
      begin
        antwort:='NG';
      end;
  end;
end
else
begin
  showmessage('Datei wurde nicht gefunden!');
  exit;
end;
Dein neuer Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
if pos('.txt', Dateipfad) >0 then
begin
  if FileExists(Dateipfad) then
  begin
    filetxt.LoadFromFile(Dateipfad);
    for i2:=0 to filetxt.count-1 do
    begin //added
      if pos(str, filetxt[i2]) >0 then
      begin
        antwort:=edit2.text;
      end
      else
      begin
        antwort:='NG';
      end// if Pos
    end
  end//added
end
else
begin
  showmessage('Datei wurde nicht gefunden!');
  exit;
end;
Eigentlich sollten die beiden Versionen also genau das gleiche machen. :nixweiss: