【问题标题】:Can't figure out the cause of BAD_ACCESS error?无法弄清楚 BAD_ACCESS 错误的原因?
【发布时间】: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

标签: c++ memory vector struct


【解决方案1】:

线

for(int col = 0; col

似乎错误,因为您可以索引的最高元素是 14,而不是 15。您应该将

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多