I’m having a problem when I use these 2 FOR to initialize a two dimensional vector/array:
I have these types defined:
type
Range9 = 0..8;
Digit = '0'..'9';
Board = array [Range9,Range9] of Digit;
and then the part of the code where there are problems with the FOR’s is the following:
var
i : Range9;
j : Range9;
table : Board;
BEGIN
for i:=0 to 8 do begin
for j:=0 to 8 do begin
table[i,j] := '0'
end
end;
END.
Now the problem is that, when I debug this portion of code, for some reason, my i variable is modified when it’s not supposed to.
For example, I have a watch on i and j and if I put a breakpoint in the line table[i,j] := 0
I see with the watches these values:
i j
0 0
256 1
512 2
768 3
1024 4
1280 5
1536 6
1792 7
2048 8
2049 8
1 0
257 1
513 2
769 3
and so on…
So, when the program enters in the second for (the one that increases the j) my i increases in intervals of 256… I really don’t know why is this happening.
And another thing I discovered is that, the problem solves if I change the TYPE of the i variable.
If in the VAR section I put i : integer instead of i : Range9, i doesn’t get modified when isn’t supposed to.
I would really appreciate if someone explains me why is happening this.
I’ve found the answer to my own question… well, I didn’t exactly found the answer, I’ve asked this same question in the forum board of the programming course I’m attending and one of the professors gave me this link:
(it’s in spanish btw)
http://www.fing.edu.uy/inco/cursos/prog1/pm/field.php/FAQ/Laboratorio#toc17
A quick translation:
This happens with variables defined as subranges. The reason isn’t sure; but without doubt is an implementation error of the debugger. There is a ‘trick’ that can work to solve this (although not always), to be able to see the correct values on the debugger:
Suppose that you have the following variable in your program:
Add in your program a integer variable which won’t be used in any part of the program:
Then when you define the debugger watch, instead of adding the
anythingvariable, you should add the following expression:The aux variable can be used to view different variables, so you only need to declare one aux variable.
In some cases, the previous may not work. Another solution is to change the type of all the variables defined with subranges to integer, char, string, etc (depending the case) only for debug and the change it back again.
end of the translation.
Hope this will be useful for someone else facing the same error.
BTW, this happens with the debugger of free pascal IDE 2.2.2 , maybe in another IDE/compiler/debugger of pascal it doesn’t happen.