[fpc-pascal]Re: "for" loop questions
Balogh, Karoly (Charlie/iNQ)
charlie at scenergy.dfmk.hu
Sun Dec 8 08:50:51 CET 2002
On 02.12.08., support at falconsoft.com wrote:
> I have a question regarding for loops. If you execute the following code:
> L : TList;
> P : Pointer;
> I : Integer;
> L := TList.Create;
> for I := 0 to L.Count - 1 do begin
> P := L[I];
> You get an exception telling you that the list index is out of bounds.
> L.Count returns "0", but the loop still executes (or at least, it tries
> to) once, which is incorrect. According to every language I've ever used,
> if L.Count is 0 the first time, the loop should never execute at all.
Really? Think again... ;)
> Is this a bug, or am I missing something? Of course the fix is to just
> put an "if L.Count > 0" before the "for" loop, but that's not the point -
> the point is I shouldn't have to. :)
But you should. :) I don't know the type of L.Count, but i suppose it's
unsigned. If L.Count is 0, and you try to count until L.Count-1, it
it simply underflows at the -1 operation. And i will count to $FF, $FFFF
or $FFFFFFF, or whatever, depending on the type of L.Count.
And this is why you get an exception.
.:%[ Cybernetic Hydraulic Android Responsible for ]%:.
.:%[ Logical Infiltration and Exploration ]%:.
.:%[ Member of TeamOS/2 Hungary ]%:.
.:%[ Member of Hungarian Amiga User Group ]%:.
More information about the fpc-pascal