Grid型を用いた際のエラー
kerochan  2018/07/27(Fri) 16:09
windows10でopensiv3dのver0.27を用いています。
下のコードを実行するとvector subscript out of range のエラーが出ます。

Grid<int> dummy(4, 3);
for (int h = 0; h < 3; h++)
  for (int w = 0; w < 4; w++)
    dummy[w][h] = 0;

ですが、下のコードを実行してもエラーは出ません。

Grid<int> dummy(3, 4);
for (int h = 0; h < 4; h++)
  for (int w = 0; w < 3; w++)
    dummy[w][h] = 0;

どちらも配列の範囲外にはアクセスしていないと思うのですが、一つ目のコードでどこか書き方がおかしい部分はありますか?
記事編集
Reputeless  2018/07/29(Sun) 19:35
どちらも範囲外アクセスです。
Grid<int32> grid(10, 20); の最後の要素は grid[19][9] です。
編集
kerochan  2018/07/29(Sun) 21:47
コンストラクタではgrid(高さ,幅)で指定しているということですか?
編集
Reputeless  2018/07/29(Sun) 23:27
Image と同様に Grid(width, height) です。

for (size_t y = grid.height(); ++y)
{
for (size_t x = grid.width(); ++x)
{
grid[y][x];
}
}

のように全要素にアクセスします。
編集
kerochan  2018/07/30(Mon) 00:12
[]を用いて要素にアクセスする場合は、grid[height][width]というように指定すればよいというわけですね。ありがとうございました。
個人的にですが、コンストラクタのときと[]でアクセスする時と幅と高さの指定が逆なので混乱します。なぜコンストラクタではGrid(width, height)というように渡すようになっているんですか?
編集
Reputeless  2018/08/03(Fri) 07:35
Window::Resize(width, height);
Point(x, y);
Image::resize(width, height);
などの他の関数と引数順をそろえるためです。
編集
件名
Re: Grid型を用いた際のエラー
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -