无法弄清楚BAD_ACCESS错误的原因?

时间:2017-11-15 17:27:20

标签: c++ memory vector struct

当尝试使用“Cell”初始化此向量时,会出现错误的访问错误

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});
        }
    }

我似乎无法弄明白为什么。经过一些谷歌搜索后,我认为它与内存被取消引用或丢失有关,但似乎无法弄清楚究竟发生了什么。任何帮助都会非常感激。感谢。

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;

            }

感谢@ user0042,上面的代码段不再引发错误的访问错误。但是,我的下一个代码段会抛出完全相同的错误,特别是if语句中的第一行。

public Display(JFrame frame){
    this.frame = frame;
}

1 个答案:

答案 0 :(得分:0)

该行

for(int col = 0; col&lt; = 15; col ++)

似乎错了,因为您可以索引的最高元素是14,而不是15.您应该将&lt; =替换为&lt;。

对于您的其他代码,我不知道curX,xPos,curY和yPos的内容是什么,但请确保它们不大于您的数组大小 - 1。