2017-02-01 8 views
-2

2dの配列の代わりに2dのベクトルを使って書いたコードがありますが、それを実行するには "ベクトルの添え字が範囲外です" 。どんな助けもありがとう。C++のデバッグアサーション失敗したベクトルの添字が範囲外にある

#include <iostream> 
#include <vector> 

using namespace std; 

int mapx, mapy = 5; 

vector<vector<int>> map(mapx, vector<int> (mapy, 0)); 

int i, x; 

int main(){ 

for (i = 0; i < map.size(); i++){ 
    for (x = 0; x < map[i].size(); x++) 
    { 
     map[i][x] = i + x; 
    } 
} 

cout << map[0][0]; 

cin >> i; 
return 0; 
} 
+2

'int型のmapx'が初期化されていませんが。そのような修正を行うように見える:http://coliru.stacked-crooked.com/a/084aea611a4975d0 –

+0

最後のコメントは、私のエラーを実現させた、それは今、働く、ありがとう。 – andrew

答えて

1
int mapx, mapy = 5; 

この文は、5に両方の値を初期化されていません:それは5mapyを初期化し、初期化されていないmapxを残し、2 int Sを宣言しています。 mapxを使用すると、未定義の動作になります。 forループ全体がスキップされ、map[0][0]にアクセスすると範囲外です。

あなたがこの希望:

int mapx = 5, mapy = 5; 
関連する問題