Entwickler-Ecke

Sonstiges (Delphi) - EAccessViolation und eine andere Frage


rizor - Mo 16.10.06 18:20
Titel: EAccessViolation und eine andere Frage
Hi,

ich bekomme bei meinem Prog eine EAccessViolation.


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:
procedure TForm1.ausschreiben(am:integer);
var
  c,e,i:integer;
  sl:TStringList;
  b,exp:string;
begin
  for i:=0 to am do
  begin
    sl.Delimiter:='^';
    sl.DelimitedText:=a[i];
    for c:=0 to length(sl[0]) do
    begin
      if string(sl[0][c])<>'x' then
        b:=b+sl[0][c];
    end;
    e:=StrToInt(sl[1]);
    for c:=0 to e do
    begin
      exp:=exp+'*x';
    end;
    a[i]:=b+exp;
    b:='';
    exp:='';
    sl.free;
  end;
end;


Woran liegt das?
Dass Programm soll x^2 in x*x umwandeln.
Das für eine bestimmte Anzahl an arrays.

2. Frage wie kann ich string(sl[0][c])<>'x' so umschreiben, dass ich sage er soll
die anweisung der b:=b+sl[0][c]; dann solange ausführt bis ein buchstabe in sl erscheint?


Sinspin - Mo 16.10.06 18:34

bevor du sl verwenden kannst solltest du das objekt aber auch anlegen!


rizor - Mo 16.10.06 18:50

Stimmt.

Habe jetzt einen neuen Fehler.

im projekt funktion.exe ist eine Exception der Klasse EStringListError it der Meldung 'Listenindex überschreitet Maximum (0)' aufgetreten.

Gibt er mir aus.

Wieso?
Was bedeutet Listenindex?


wulfskin - Mo 16.10.06 19:12

Hallo,

naja du greifst auf ein Element zu, dass nicht existiert (überschreitet das Maximum 0, die Liste ist also leer). Ich vermute, dass kommt aus Zeile 11, wo du auf das nullte Element zugreifst.

Übrigens: Du könntest einfach mal deinen Quelltext debuggen, bevor du hier fragst. So ein Fehler lässt sich recht einfach finden :/

Gruß Hape!


rizor - Mo 16.10.06 19:16

Habe ich ja, aber ich kann das Problem nicht beheben.

Wie soll ich sonst auf das 0. element zugreifen ein sl fängt ja an bei 0 zu zählen, oder?


wulfskin - Mo 16.10.06 19:24

user profile iconrizor hat folgendes geschrieben:
Habe ich ja, aber ich kann das Problem nicht beheben.

Wie soll ich sonst auf das 0. element zugreifen ein sl fängt ja an bei 0 zu zählen, oder?
Lesen bitte? Ich schrieb, die Liste ist leer!! Also zuerst mal überprüfen ob die Liste 1 Element hat (SL.Count >= 1) bevor du auf das nullte Element zugreifst!

Gruß Hape!


rizor - Mo 16.10.06 19:39

aber es gibt auf jeden fall sl[0] und sl[1], da es ein einfacher parser werden soll
also a[i] hat zum beispiel 24x^2 das heißt sl[0] muss 24x und sl[1] 2 sein.

hab dich falsch verstanden.
habe es jetzt eingebaut.

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:
procedure TForm1.ausschreiben(am:integer);
var
  c,e,i:integer;
  sl:TStringList;
  b,exp:string;
begin
  for i:=0 to am do
  begin
    sl:=TStringList.Create;
    sl.Delimiter:='^';
    sl.DelimitedText:=a[i];
    if sl.count>=1 then
    begin
      for c:=0 to length(sl[0]) do
      begin
        if string(sl[0][c])<>'x' then
          b:=b+sl[0][c];
      end;
      e:=StrToInt(sl[1]);
      for c:=0 to e do
      begin
        exp:=exp+'*x';
      end;
      a[i]:=b+exp;
      b:='';
      exp:='';
      sl.free;
    end;
  end;
end;


Nun habe ich das Problem das in Meiner hauptprozedur nicht mehr klappt. also die ausgabe eines bestimmten arrays.
wieso?