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
rizor 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?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!