矢量擦除内存访问错误

时间:2014-12-18 05:27:15

标签: c++ vector sfml

我刚刚开始尝试使用矢量,并且在删除矢量中的某个点时我一直遇到这个问题。一旦执行erase()函数,它就会导致应用程序崩溃并发生内存访问冲突。

以下是该函数的代码:

 bool moveBullets(void)
 {
   int i = 0;
   for(std::vector<sf::Sprite>::iterator it = laserList.begin(); it != laserList.end(); it++)
   {
    laserList[i].move(0.0f, -2.0f);
    int id = 0;
        for(std::vector<sf::Sprite>::iterator s = enemy.begin(); s != enemy.end(); s++)
        {
            if(checkCollision(laserList[i], enemy[id]))
            {
                laserList.erase(laserList.begin() + i);

                //enemy.erase(s);
                std::cout << "COLLISION";
            } 
            id++;
        }
    i++;
}
return 0;

}

这个函数基本上是通过向量运行并检查另一个向量进行冲突。因此,向量A将一直检查通过向量B的碰撞。一旦它完全检查了向量B,它将进入向量A中的下一个位置并重复。

然而,它运行erase()函数之前一切正常。然后它会导致内存访问错误。

感谢您的帮助! : - )

1 个答案:

答案 0 :(得分:1)

当您致电erase时,您需要修改laserList。这使it无效,因为它指向laserList的先前值。但随后你增加it。您不能将迭代器增加到不再存在的内容。这毫无意义。