![]() |
Delphi-Version: 5
Kommischer ERange Error
Min DP'ler
Bin grad am programmieren mit Lazarus und bin dabei auf folgendes Problem gestoßen: Ich bekomme einen ERange Error bei folgender anweisung:
Delphi-Quellcode:
und ich hab keine idee woran das liegt, weil ich geh doch nur bis high(changefuncs)
foo := code[i];
l := high(changefuncs); for k := 0 to l do begin if (pos(changefuncs[k].Name, foo) > 0) and not newfunc and not //hier kommt der Fehler kommentar then begin while (pos('(', code[j]) = 0) or (pos(');', code[j]) > 0) or (pos('if', code[j]) > 0) do j := j - 1; loadfunc(newfunc, j, tmp, code); end; end; btw: Changefuncs ist vom type state und state ist:
Delphi-Quellcode:
Kann mir da jemand helfen, weil ich keine Idee hab.
type
state = record startline: integer; endline: integer; Name: string [30]; end; |
AW: Kommischer EERange Rror Zugriffsverletzung
Zitat:
Delphi-Quellcode:
, oder?
array ??? of state
Schreib doch die Schleife einfach so:
Delphi-Quellcode:
for k := Low(changefuncs) to High(changefuncs) do
|
AW: Kommischer EERange Rror Zugriffsverletzung
Ja array of state.
Habs ausgetauscht, aber selber Fehler. |
AW: Kommischer EERange Rror Zugriffsverletzung
Zitat:
Delphi-Quellcode:
? Oder
array of state
Delphi-Quellcode:
? Kopier doch einfach mal die relevanten Deklarationen in deinen Ursprungspost.
array[...] of state
|
AW: Kommischer EERange Rror Zugriffsverletzung
Wo wird j initialisiert?
|
AW: Kommischer EERange Rror Zugriffsverletzung
Wesentlich weiter oben, ich post mal den ganzen funktions code:
Delphi-Quellcode:
function TForm1.extractfuncs(var statevar: string; const endswitch: integer;
code: TStrings): boolean; var kommentar: boolean; newfunc: boolean; k: integer; j, i, l: integer; tmp: integer; Count, count2: integer; foo: string; begin Count := 0; count2 := 0; tmp := 0; Result := False; //showmessage(inttostr(endswitch)); for i := endswitch to code.Count do (*Für alle Zeilne vom letzten Status bis ende des Files*) begin if i = 2091 then sleep(1); newfunc := False; if (pos('/*', code[i]) > 0) then kommentar := True; if (pos('{', code[i]) > 0) then (*Klammer auf registrieren, könnte die gescuhte funktion sein*) begin if kommentar then begin if ((pos('{', code[i]) < pos('/*', code[i])) and not (pos('{', code[i]) = 0)) or ((pos('{', code[i]) > pos('*/', code[i])) and not (pos('*/', code[i]) = 0)) then begin Inc(Count); if Count = count2 + 1 then j := i; (*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*) end; end else begin Inc(Count); if Count = count2 + 1 then j := i; (*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*) end; end; if pos('}', code[i]) > 0 then if kommentar then begin if ((pos('}', code[i]) < pos('/*', code[i])) and not (pos('}', code[i]) = 0)) or ((pos('}', code[i]) > pos('*/', code[i])) and not (pos('*/', code[i]) = 0)) then begin Inc(Count2); end; end else begin Inc(Count2); end; if (pos(statevar, code[i]) > 0) and not (pos('==', code[i]) > 0) and (pos('=', code[i]) > 0) and not kommentar then (*Wenn switch variable gefunden, dann*) begin while pos('(', code[j]) = 0 do (*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*) j := j - 1; loadfunc(newfunc, j, tmp, code); end; foo := code[i]; l := high(changefuncs); //if ((i = 1543) or (i = 1545)) then // ShowMessage(changefuncs[l - 1].Name); if sametext(statevar, 'GSMData.State') then sleep(1); for k := Low(changefuncs) to high(changefuncs) do begin if (pos(changefuncs[k].Name, foo) > 0) and not newfunc and not kommentar then begin while (pos('(', code[j]) = 0) or (pos(');', code[j]) > 0) or (pos('if', code[j]) > 0) do (*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*) j := j - 1; loadfunc(newfunc, j, tmp, code); end; end; if (pos('*/', code[i]) > 0) then kommentar := False; if newfunc then Result := True; end; end; |
AW: Kommischer EERange Rror Zugriffsverletzung
Zitat:
Aber wer hört schon auf seinen Compiler ... die Meldungen da unten sind ja eh nicht wichtig :roll: Zitat:
Zitat:
|
AW: Kommischer EERange Rror Zugriffsverletzung
Zitat:
|
AW: Kommischer EERange Rror Zugriffsverletzung
Zitat:
Changefuncs wie schon erwähnt Sorry hatte deinen Beitrag nicht gesehen (den oberen)
Delphi-Quellcode:
Tante Edit meinte noch:
private
changefuncs: array of state; Die Funktion läuft in einer Schleife solang Result falsch ist, denn das ganze dient dazu eine Statemachine zu analysieren (C Code) Natürlich können auch andere Funktionen in States aufgerufen werden die dann wiederum die state Variable ändern oder wieder eine Funktion aufrufen die ... Deswegen durchlaufe ich die Funktionen solange bis sicherlich keine Neue Funktion mehr ins Array kommt. Das erzähl ich deswegen weil die ersten 4x läuft die Funktion ohne Probleme da drüber. |
AW: Kommischer EERange Rror Zugriffsverletzung
Problem gelöst:
loadfunc hatte mir während dem schleifen durchlauf changefuncs wieder verkleinert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr. |
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