0

これらの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)、i256の間隔で増加します...なぜこれが起こっているのか本当にわかりません。

そして私が発見したもう一つのことは、i変数のTYPEを変更すれば問題が解決するということです。VARセクションで、の代わりに配置した場合、想定i : integerされていないときに変更されません。i : Range9i

なぜこれが起こっているのか誰かが私に説明してくれたら本当にありがたいです。

4

2 に答える 2

1

私は自分の質問に対する答えを見つけました...まあ、私は正確に答えを見つけられませんでした、私は私が参加しているプログラミングコースのフォーラムボードでこれと同じ質問をしました、そして教授の一人が私にくれましたこのリンク:

(スペイン語です) http://www.fing.edu.uy/inco/cursos/prog1/pm/field.php/FAQ/Laboratorio#toc17

簡単な翻訳:

これは、サブ範囲として定義された変数で発生します。理由は定かではありません。しかし、間違いなくデバッガーの実装エラーです。デバッガーで正しい値を確認できるようにするために、これを解決するために機能する「トリック」があります(常にではありませんが)。

プログラムに次の変数があるとします。

var anything: 1 .. 10;

プログラムのどの部分でも使用されない整数変数をプログラムに追加します。

var anything: 1..10;
    aux: integer;  { only for the debugger }

次に、デバッガーウォッチを定義するときに、anything変数を追加する代わりに、次の式を追加する必要があります。

aux:= anything

aux変数はさまざまな変数を表示するために使用できるため、1つのaux変数を宣言するだけで済みます。

場合によっては、前の方法が機能しないことがあります。もう1つの解決策は、サブ範囲で定義されたすべての変数の型を、デバッグのためだけに整数、文字、文字列などに変更し(大文字と小文字を区別)、再度変更することです。

翻訳の終わり。

これが同じエラーに直面している他の誰かに役立つことを願っています。ところで、これは無料のpascal IDE 2.2.2のデバッガーで発生します。おそらく、pascalの別のIDE/コンパイラー/デバッガーでは発生しません。

于 2012-10-08T16:37:29.467 に答える
0

しばらくパスカルをやっていなかったので、少し錆びているかもしれません。私が考えることができる唯一の問題は、バイト配列として解釈された文字範囲を作成し、それが数字に変換されてから乗算され、それらの奇妙な値が得られたことです。しかし、私は間違っている可能性があります。FreePascalに慣れていません。

Type
    Range9 = 0..8
    Board = Array[Range9,Range9] of Integer;
var
A : Board;
I,J : Integer;
begin
  For I:=0 to 8 do
    For J:=0 to 8 do
       A[I,J]:=I*J;
end.

参照: ftp: //ftp.freepascal.org/pub/fpc/docs-pdf/ref.pdf

于 2012-10-08T15:59:44.227 に答える