2017-11-15 1 views
0

、悪いアクセスエラーがBAD_ACCESSエラーの原因を特定できませんか? 「セル」で、このベクトルを初期化しようとすると

grid.emplace_back(Cell{1,false, row,col}); 

で投げ続け、私は理由を把握するように見えることはできません。いくつかのグーグルの後、私はそれがメモリの参照外れや紛失に関係していると信じていますが、正確に何が起こっているのかわからないようです。どんな助けも非常に高く評価されます。ありがとう。

struct Cell{ 
    int cellVal; 
    bool visited; 
    int xPos; 
    int yPos; 
}; 
vector<vector<Cell>> grid; 
vector<Cell> path(15); 

vector<Cell> monsterPath(15); 
int main() { 

    grid.reserve(15); 
    for(int row = 0; row <=1; row++){ 
     for(int col = 0; col <=15; col++){ 
      grid[col].reserve(15); 
      grid.emplace_back(Cell{1,false,row,col}); 
     } 
    } 

@ user0042のおかげで、上記のコードセグメントは、不正アクセスエラーをスローしなくなりました。しかし、私の次のコードセグメントは、特にif文の最初の行とまったく同じエラーをスローします。

if((!grid[path[curX].xPos - 1][path[curX].yPos].visited) &&  //cell being checked is (x-1, y) 
       !grid[path[path.size() - 1].xPos - 1][path[path.size() - 1].yPos - 1].visited &&    //check cell x-1, y-1 
       !grid[path[path.size() - 1].xPos - 2][path[path.size() - 1].yPos].visited &&     //check cell x-2, y 
       !grid[path[path.size() - 1].xPos][path[path.size() + 1].yPos + 1].visited)    //check cell x, y+1 
      { 
       grid[path[path.size()-1].xPos - 1][path[path.size()-1].yPos].cellVal = 0; 
       grid[path[path.size()-1].xPos - 1][path[path.size()-1].yPos].visited = true; 
       path.emplace_back((grid[path[path.size()-1].xPos - 1][path[path.size()-1].yPos])); 
       cout << "path constructed" << endl; 

      } 
+0

使用 ')(サイズを変更'の代わりに' reserve() 'を使います。 – user0042

+0

@ user0042は、代わりにemplace_backの代わりに代入演算子を使用すると、違いがありますか?ありがとうございました –

+0

デバッガを使用してください。 – smac89

答えて

0

のためのライン

(int型コル= 0; COL ++; < = 15 COL)

が間違っているようだ、あなたはインデックスが14であることができ、最高の要素ではなく、15としてあなたは交換する必要があります< = <となります。コードのあなたの他の作品のために

、私はcurX、XPOS、curYとYPOSの内容だか知っているが、彼らはあなたの配列のサイズ、その後大きなではないことを確認していない - 1.

関連する問題