これらの2つのFORを使用して2次元のベクトル/配列を初期化すると、問題が発生します。次のタイプが定義されています。
type
Range9 = 0..8;
Digit = '0'..'9';
Board = array [Range9,Range9] of Digit;
そして、FORに問題があるコードの部分は次のとおりです。
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.
ここで問題となるのは、コードのこの部分をデバッグするときに、何らかの理由で、i
想定外のときに変数が変更されることです。
たとえば、私は時計を持っていて、時計でi
表示j
される行にブレークポイントを設定するtable[i,j] := 0
と、次の値になります。
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
等々...
したがって、プログラムが2番目に入ると(増加するものj
)、i
256の間隔で増加します...なぜこれが起こっているのか本当にわかりません。
そして私が発見したもう一つのことは、i
変数のTYPEを変更すれば問題が解決するということです。VARセクションで、の代わりに配置した場合、想定i : integer
されていないときに変更されません。i : Range9
i
なぜこれが起こっているのか誰かが私に説明してくれたら本当にありがたいです。