Entwickler-Ecke
Sonstiges (Delphi) - Auf Variable 'i' kann wegen Optimierung nicht zugegriffen...
MSC - So 02.09.07 23:38
Titel: Auf Variable 'i' kann wegen Optimierung nicht zugegriffen...
Hallo ich habe mal wieder ein Problem.
Diesmal kommt eine merkwürdige Fehlermeldung:
Auf Variable 'i' kann wegen Optimierung nicht zugegriffen werdenin einer For Schleife
hier der Quelltext, ist ein teil der FormCreate Prozedur:
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:
| ...
Reset(o); for i:=0 to filesize(o)-1 do begin S:=''; Read(o,d[i]); S:=b[StrToint(d[i].code)].name; if d[i].w11 <> '-1' then S:=S+' '+a[StrToInt(d[i].w11)].shor; if d[i].w12 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w12)].shor; if d[i].w21 <> '-1' then S:=S+' '+a[StrToInt(d[i].w21)].shor; if d[i].w22 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w22)].shor; if d[i].w31 <> '-1' then S:=S+' '+a[StrToInt(d[i].w31)].shor; if d[i].w32 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w32)].shor; if d[i].w41 <> '-1' then S:=S+' '+a[StrToInt(d[i].w41)].shor; if d[i].w42 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w42)].shor; ListBox1.Items.Add(S); end; Closefile(o);
... |
Die Hilfe konnte mir nicht helfen und die Beiträge die die Suchfunktion gefunden hat leider auch nicht...
Nur das man die Optimierung abschalten sollte, aber wie geht das?
Oder gibt es eine andere Möglichkeit?
Reinhard Kern - Mo 03.09.07 02:27
Titel: Re: Auf Variable 'i' kann wegen Optimierung nicht zugegriffen...
MSC hat folgendes geschrieben: |
Hallo ich habe mal wieder ein Problem.
Diesmal kommt eine merkwürdige Fehlermeldung:
Auf Variable 'i' kann wegen Optimierung nicht zugegriffen werdenin einer For Schleife
hier der Quelltext, ist ein teil der FormCreate Prozedur:
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:
| ...
Reset(o); for i:=0 to filesize(o)-1 do begin S:=''; Read(o,d[i]); S:=b[StrToint(d[i].code)].name; if d[i].w11 <> '-1' then S:=S+' '+a[StrToInt(d[i].w11)].shor; if d[i].w12 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w12)].shor; if d[i].w21 <> '-1' then S:=S+' '+a[StrToInt(d[i].w21)].shor; if d[i].w22 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w22)].shor; if d[i].w31 <> '-1' then S:=S+' '+a[StrToInt(d[i].w31)].shor; if d[i].w32 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w32)].shor; if d[i].w41 <> '-1' then S:=S+' '+a[StrToInt(d[i].w41)].shor; if d[i].w42 <> '-1' then S:=S+'+'+a[StrToInt(d[i].w42)].shor; ListBox1.Items.Add(S); end; Closefile(o);
... |
Die Hilfe konnte mir nicht helfen und die Beiträge die die Suchfunktion gefunden hat leider auch nicht...
Nur das man die Optimierung abschalten sollte, aber wie geht das?
Oder gibt es eine andere Möglichkeit? |
Zur Erklärung: i wird ja nur einmal gebraucht, um d[i] zulesen, das speichert der Compiler und vergisst i für den Rest der Schleife. Damit optimiert er die ganzen überflüssigen Indizierungen d[i] weg. Abgesehen von fragwürdigen Tricks (Zuweisung von i an irgendwas nicht lokales) hilft nur die Abschaltung der Optimierung oder die Abfrage zum geeigneten Zeitpunkt:
Du müsstest i abfragen können, wenn das Programm auf der Zeile Read(o,d[i]); steht, diese also noch nicht ausgeführt hat.
Gruss Reinhard
MSC - Mo 03.09.07 02:45
Titel: Re: Auf Variable 'i' kann wegen Optimierung nicht zugegriffe
Reinhard Kern hat folgendes geschrieben: |
Zur Erklärung: i wird ja nur einmal gebraucht, um d[i] zulesen, das speichert der Compiler und vergisst i für den Rest der Schleife. Damit optimiert er die ganzen überflüssigen Indizierungen d[i] weg. Abgesehen von fragwürdigen Tricks (Zuweisung von i an irgendwas nicht lokales) hilft nur die Abschaltung der Optimierung oder die Abfrage zum geeigneten Zeitpunkt:
Du müsstest i abfragen können, wenn das Programm auf der Zeile Read(o,d[i]); steht, diese also noch nicht ausgeführt hat.
Gruss Reinhard |
Wie geht die Abschaltung? Und hat das einen Einfluss auf das fertige Programm?
Denn im fertigem Programm funktioniert die Prozedur auch nicht: die Listboxeinträge sind nicht richtig.
Wenn ich mit F7 einzeln durchgehe funktioniert i in der Zeile
for i:=0 to filesize(o)-1 do begin
bereits nicht.
Zu erwähnen wäre, dass die Prozedur 5 For Schleifen hat und fehlerhafte die 3. ist.
Bernhard Geyer - Mo 03.09.07 08:17
Titel: Re: Auf Variable 'i' kann wegen Optimierung nicht zugegriffe
MSC hat folgendes geschrieben: |
Zu erwähnen wäre, dass die Prozedur 5 For Schleifen hat und fehlerhafte die 3. ist. |
Verwendest du dann i in einer äußeren/Inneren Schleife nochmal?
arj - Mo 03.09.07 09:21
Für das Debuggen einfach folgendes machen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| {$O-} pocedure Blub(); [...] end; {$O+} |
Dann sollte auf i zugreifbar sein.
MSC - Mo 03.09.07 09:44
Die For Schleifen sind nacheinander.
Beim nachsehen ist mir mein Fehler aufgefallen:
die For Schleifen, die das Programm die Daten für Array a und b einlesen lässt, kommt erst danach. Dann ist es kein Wunder, dass das ganze nicht geht.
Das Optimierung abschalten hat funktioniert, allerdings lag der Fehler woanders.
Allerdings finde ich es doch einwenig Rätselhaft das dort soeine Fehlermeldung entsteht.
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!