【发布时间】:2018-04-29 01:14:52
【问题描述】:
当尝试用“Cell”初始化这个向量时,一个错误的访问错误不断被抛出
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;
}
【问题讨论】:
-
使用
resize()而不是reserve()。 -
@user0042 使用赋值运算符而不是 emplace_back 也会有所作为吗?顺便谢谢
-
使用调试器。
-
天才,谢谢。我以前怎么没想到???? /s