矢量范围问题

时间:2013-11-30 00:29:25

标签: c++ vector sfml

所以我试图创建一种保存/跳跃系统,玩家可以将世界的某些方面恢复到前一点。由于某种原因,以下代码会产生向量错误。 (“向量下标超出范围”)

(entityList是ptr而recordEntityList不是)

void Map::record()
{
    for(unsigned int x = 0; x < entityList.size(); x++)
    {
        if(entityList[x]->getRewind() == true)
        {
            recordedEntityList.push_back(*entityList[x]);
            printf("%f, %f\n", entityList[x]->getSprite().getPosition().x, entityList[x]->getSprite().getPosition().y);
        }
    }
}

void Map::rewind()
{
    for(unsigned int x = 0; x < entityList.size(); x++)
    {
        if(entityList[x]->getRewind() == true)
        {
            entityList.erase(entityList.begin() + x);
        }
    }

    for(unsigned int y = 0; y < recordedEntityList.size(); y++)
    {
        entityList.push_back(&recordedEntityList[y]);
    }

    recordedEntityList.clear();
}

1 个答案:

答案 0 :(得分:2)

rewind中,您正在将指向recordedEntityList的元素的指针推送到entityList,然后清除recordedEntityList。这将导致entityList包含无效指针,并在访问指针时调用未定义的行为。

此外,与此错误无关,在rewind的第一个循环中对其进行迭代时修改向量的方式可能会导致您跳过条目:如果两个连续条目有getRewind()返回{ {1}},第二个不会被删除。