gpt4 book ai didi

c++ - vector 范围问题

转载 作者:行者123 更新时间:2023-11-28 03:03:07 25 4
gpt4 key购买 nike

所以我正在尝试创建一种保存/跳跃系统,玩家可以在其中将世界的某些方面恢复到之前的某个点。由于某种原因,以下代码会产生 vector 错误。 ("vector 下标超出范围")

(entityList 是一个 ptr 而 recordedEntityList 不是)

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

最佳答案

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

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

关于c++ - vector 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com