![]() |
FOR-Schleifenvariable 'ti' kann nach Durchlauf undefiniert..
..sein
tag
Delphi-Quellcode:
ti := 0;
for ti := Low(myarray) to High(myarray) do begin end; mag mir jemand sagen was hieran falsch ist? delphi meldet den fehler s.o |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Daran ist nichts falsch, aber wenn Du 'ti' nach dem Durchlauf der Schleife nutzt, dann kann es sein, dass darin kein sinnvoller Wert steht. Und das ist genau das, was Delphi sagt.
...:cat:... |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
moin sakura,
kann ich das irgendwie abschalten? denn im code der schleife (hab ich hier rausgelassen weil es zu lang wäre) ist 100% kein fehler, ich benutze "ti" lediglich als index für das array. manchmal wenn ich so kompiliere -> projekt -> alle projekte kompilieren.... gehn die fehler weg, und manchmal kommen sie wieder wenn ich mit dem grünen pfeil kompiliere und starte. Das ist ziemlich nervig da ich das fehler fenster unten ewig wegklicken muss. |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
...:cat:... |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hi,
doppelklick doch mal auf die Hinweismeldung, dann springste automatisch zur Zeile, die dieser Hinweis betrifft. Der Fehler kommt eigentlich nur, wenn 'ti' außerhalb bzw. nach der Schleife benutzt wird!
Delphi-Quellcode:
...
FOR ti:=0 TO 5 DO BEGIN myArray[ti] := 'test'; ... END; ... myArray[ti] := 'huch'; //<<-- Hinweis vom Compiler Gruß Stephan :dance: :xmas: |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hi Pseudemys Nelsoni,
die Compileroptimierung hat mir z.B. mal eine Vorschleife von oben nach unten durchlaufen lassen, anstatt wie von mir geplant von unten nach oben (also downto anstatt to). Ich habe mich nicht weiter drum gekümmert. In deinem Fall lässt sich die Warnung umgehen: schreibe einfach nach der For-Schleife folgendes:
Delphi-Quellcode:
Somit ist ti auch für den Compiler das was es sein sollte, und dein Problem ist erledigt.
ti := High(myarray);
Greetz alcaeus |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
@sakura, werd ich dann wohl machen müssen :\
@steve: ich shcreibe gerade einen irc server, ich habe ca 90 case teile in so gut wie jedem benutz ich ti (temp integer *g*) als laufvariable, die FOR-schleife initialisiert die variable doch eigentlich, naja werd ichs von nun an eben selbst machen :\ @alc: oder so, thx auch dir :) danke für die hilfe ;) BTW: coole smilies lol |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hi,
deswegen ja der Doppelklick auf die Hinweismeldung, dann weißt Du, wo das 'ti' wohl doch mal außerhalb ner Schleife benutzt wird ;) Ohne Fehler keine Fehlermeldung :mrgreen: Gruß Stephan :dance: :xmas: |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
moin steve ^^, jo klar weiss ich wo meine variable nochmal benutzt wird ;) mein code sieht ca so aus(und das 90~ mal):
Delphi-Quellcode:
deswegen ist mir das egal ob die variable dann undefiniert wäre... nur die meldung hat mich halt gestört
ti := 0;
case irgendwas of irgendwas1: begin for ti := Low(MyArray) to High(Myarray) do begin // irgendwas end; end; irgendwas2: begin for ti := Low(MyArray) to High(Myarray) do begin // irgendwas end; end; irgendwas...: begin for ti := Low(MyArray) to High(Myarray) do begin // irgendwas end; end; irgendwas90: begin for ti := Low(MyArray) to High(Myarray) do begin // irgendwas end; end; end; |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Aber sagt mal...
Auch wenn der Copiler meckert, habe ich noch nie erlebt, dass nach
Delphi-Quellcode:
I ungleich N+1 ist... Darauf kann man sich doch verlassen, oder? :gruebel:
for I:= 0 to N do Irgendwas;
|
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hallo Shaman,
eigentlich sollte es N sein. Und wie ich bereits gesagt habe, bei mir wurde die Schleife einmal "umgedreht", warum auch immer :roll: Greetz alcaeus |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hi,
was ich eigentlich sagen wollte:
Delphi-Quellcode:
das bringt bei mir nie niemals nich ne Warnung vom Compiler, sondern erst, wenn eben nach Schleifendurchlauf was mit ti gemacht wird:
for ti := 0 TO 5 DO
begin bla; end; for ti := 0 TO 5 DO begin bla; end; for ti := 0 TO 5 DO begin bla; end;
Delphi-Quellcode:
Aber das scheint ja schon gar nimmer das Prob zu sein :mrgreen:
for ti := 0 TO 5 DO
begin bla; end; for ti := 0 TO 5 DO begin bla; end; for ti := 0 TO 5 DO begin bla; end; ShowMessage(IntToStr(i)); //<<--FOR-Schleifenvariable 'ti' kann ...... Gruß Stephan :dance: :xmas: |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hoi
Gut, ob jetzt N oder N+1, hauptsache er ist definiert. :) Das sie umgedreht ist, liegt an der Optimierung durch den Compiler. Sie sagen aber, dass das nur passiert, wenn es keine Rolle spielt, wie die Schleife durchlaufen wird. Das sollte also keine Probleme bereiten... hoffentlich :pale: Gruss Shaman |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
Nehmen wir als Beispiel diesen Code:
Delphi-Quellcode:
Hier wird die Warnung erzeugt, weil die Schleife rückwärts durchlaufen werden kann, und der Wert von i somit nicht wie erwartet 1000 sondern 0 ist.
for i := 0 to 1000 do
myarray[i] := 0; myarray[i] := 1000; Greetz alcaeus |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
naja die for-schleifen initialisieren "ti" doch aber... also undefiniert kanns nich sein oder? |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Hi,
der Compiler sagt ja auch 'könnte' und nicht 'ist' :mrgreen: Gruß Stephan :dance: :xmas: |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
Gut, dass mir das jetzt klar ist :thumb: |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Zitat:
auch "könnte" ist falsch, die schleifen werden 100% ausgeführt, also kriegen sie auch nen wert. |
Re: FOR-Schleifenvariable 'ti' kann nach Durchlauf undefinie
Also definiert ist eine Variable doch nur dann, wenn sie genau einen Vorhersagbaren Wert hat.
nach einer Schleife der Art for ti := 0 to 5 do MachWas (Str[ti]); MachWas (Str[ti]); ist ti -1 oder 0 (je nach Compiler Version und wenn gedreht wurde) oder 5 oder 6 (je nach Compiler Version und wenn nicht gedreht wurde) das ist undefiniert genug oder? bei delphi 1 z.B war ti nach der Schleife garantiert 5 bei delphi 7 ist ti nach der Schleife 6 und damit man sich nicht drauf verläßt kommt die warnung weil bei Delphi 8,9,10 könnts ja wieder ganz anderst sein DerDan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:29 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