Debugger und Range Check Error
Debugger und Range Check Error
Hallo,
ich bin dabei ein Programm zu schreiben.
Dabei habe ich zwei verschachtelte Schleifen verwendet. Die äußeren Schleife durchläuft ein Array, die innere Schleife durchläuft auch ein Array und vergleicht mit dem anderen Array (dient zum zählen bestimmter Zeichen).
Wenn ich bei Lazarus (1.2.4) nun unter Projekteinstellungen / Debuggen die Sechs Häkchen bei Überprüfungen weg mache, läuft alles so wie es soll. Wenn ich sie rein tue, dann erhalte ich einen Error "Range Check Error".
Ich verstehe nur nicht warum, das ist doch unlogisch?
Läge wirklich ein Range Check Error vor, dann würde der Error doch auch ohne die Überprüfung des Debuger erscheinen, oder?!?
LG
Epcop
ich bin dabei ein Programm zu schreiben.
Dabei habe ich zwei verschachtelte Schleifen verwendet. Die äußeren Schleife durchläuft ein Array, die innere Schleife durchläuft auch ein Array und vergleicht mit dem anderen Array (dient zum zählen bestimmter Zeichen).
Wenn ich bei Lazarus (1.2.4) nun unter Projekteinstellungen / Debuggen die Sechs Häkchen bei Überprüfungen weg mache, läuft alles so wie es soll. Wenn ich sie rein tue, dann erhalte ich einen Error "Range Check Error".
Ich verstehe nur nicht warum, das ist doch unlogisch?
Läge wirklich ein Range Check Error vor, dann würde der Error doch auch ohne die Überprüfung des Debuger erscheinen, oder?!?
LG
Epcop
Re: Debugger und Range Check Error
Kannst du etwas Code dazu zeigen?
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- af0815
- Lazarusforum e. V.
- Beiträge: 6782
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Debugger und Range Check Error
Nein, ohne Rangecheck kann es sein das du unbemerkt auf Speicherbereich ausserhalb der Grenzen zugreifst. Deshalb unbedingt herausfinden warum der Rangecheck anspricht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Debugger und Range Check Error
Hier ist die funktion, das unnötige hab ich entfernt wegen der Übersicht und sind nur ein paar replace wegen optimierungen gewesen.
Code: Alles auswählen
function tokenizer(no_ges:string): TStringList;
var
token, temp: string;
i, a, txt_laenge, schleife_exit: integer;
token_list: TStringList;
trennzeichen: array[1..9] of string = (' ', '{', '}', '(', ')', '?', '!', '$', '#');
begin
// hier sind noch einige optimierungen vor dem zerlegen, f. spätere verarbeitung [...]
// === erstellen start
txt_laenge := length(no_ges);
token_list := TStringList.Create;
schleife_exit := 0;
token := '';
if txt_laenge > 1 then
begin
for i := 0 to txt_laenge do
begin //no_ges durchgehen / Eingangstext durchgehen
schleife_exit := 0;
for a := 1 to 9 do // Anzahl Trennzeichen
begin //Trennzeichen durchgehen
if no_ges[i] = trennzeichen[a] then // HIER IST DER FEHLER???!!! Derzeit als RunError 201 (bzw. der "Range Check Error") ABER warum???
begin
temp := no_ges[i];
if trim(token) <> '' then
begin
token_list.add(trim(token));
end;
if trim(temp) <> '' then
begin
token_list.add(no_ges[i]);
end;
token := '';
schleife_exit := 1;
break;
end;
end;
if schleife_exit = 1 then
begin
continue;
end;
token := token + no_ges[i];
end; // for
end; // if
result := token_list;
token_list.Free;
end;
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: Debugger und Range Check Error
Hi,
ich glaube der Fehler liegt weiter oben:
ich glaube der Fehler liegt weiter oben:
Code: Alles auswählen
txt_laenge := length(no_ges);
...
for i := 0 to txt_laenge do
...
if no_ges[i] = trennzeichen[a]
mfg Ingo
Re: Debugger und Range Check Error
Woher soll ich jetzt wissen, was "no_ges" ist? Falls es ein String ist, hat das erste Zeichen den Index 1, nicht 0 (abweichend von der üblichen Konvention bei dynamischen Arrays).
Re: Debugger und Range Check Error
vielen Dank das war der Fehler. 1 Statt 0. Ui dieser fehler ist mir im restlichen Code nochmal unterlaufen. Kein Wunder dass es nicht völlig Reibungslos geklappt hat...
no_ges ist der Text (string) der an die Funktion gegeben wird. Welcher Text genau das ist weiß ich nicht da er vom Benutzer kommt.
danke nochmal
LG
Epcop
no_ges ist der Text (string) der an die Funktion gegeben wird. Welcher Text genau das ist weiß ich nicht da er vom Benutzer kommt.
danke nochmal
LG
Epcop
-
- Beiträge: 61
- Registriert: Mo 27. Aug 2012, 15:43
Re: Debugger und Range Check Error
noch ein Tipp -
sowas:
würde ich immer entweder so:
oder so machen:
Spätestens wenn zwischen Deklaration und Schleife mal 10000 Programmzeilen oder 3 geschachtelte Includes liegen wird klar warum man lieber ein paar Buchstaben mehr tippt und dem Kompiler das Nachzählen überläßt...
sowas:
Code: Alles auswählen
var
[...]
trennzeichen: array[1..9] of string = (' ', '{', '}', '(', ')', '?', '!', '$', '#');
[...]
for a := 1 to 9 do // Anzahl Trennzeichen
[...]
Code: Alles auswählen
const
MaxTrennZeichen = 8;
var
[...]
trennzeichen: array[0..MaxTrennZeichen ] of string = (' ', '{', '}', '(', ')', '?', '!', '$', '#');
[...]
for a := 0 to MaxTrennZeichen do // Anzahl Trennzeichen
[...]
Code: Alles auswählen
var
[...]
trennzeichen: array[1..9] of string = (' ', '{', '}', '(', ')', '?', '!', '$', '#');
[...]
for a := Low(trennzeichen) to High(trennzeichen) do // Anzahl Trennzeichen
[...]