☆配列のサイズ変更で・・・。

配列の要素を増やす処理を書いていたときの話です。
Highが配列の要素数を返していると思い込んでしまい、 こんなことでずっと悩んでいました。
ちょっと情けないかも(^^;
// 間違ったコード
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  // 配列要素数を取得しているつもり → 実際は、配列要素数-1
  I := High(TestArr);
  // 配列要素数を一つ増やしたつもり → 実際は、前のまま
  Inc(I);
  SetLength(TestArr, I);
  // 増えていることを確認するためにHighを使った。
  I := High(TestArr);
  // 一つ増やした要素に代入しているつもり → 実際は、要素の最後に代入
  TestArr[I] := 1000;
  // 結果として増えていない!
end;


// 正しいコード
procedure TForm1.Button3Click(Sender: TObject);
var
  I: Integer;
begin
  I := Length(TestArr);
  Inc(I);
  SetLength(TestArr, I);
  I := High(TestArr);
  TestArr[I] := 1000;
end;

|