尝试从 vector 中删除时,C++ 访问冲突读取位置 0x003AE000

标签 c++ vector

如果项目被 bool 值设置为不活动,当我尝试从 vector 中删除项目时出现错误。我试过在网上搜索,但没有找到任何相关信息。我试图找到不同的方法来删除 vector 中索引 x 上的元素并找到函数:vector.erase(vector.begin() + index)

因此,当我尝试在我的 for 循环中使用它时,我得到了指向删除函数行的访问冲突读取位置。

错误所在的循环代码:

    if (!player.getBullets().empty())
    {
        for (int x = 0; x < player.getBullets().size(); x++)
        {
            //Check for projectiles whos status is dead.
            if (!player.getBullets()[x]->getAlive())
            {
                //Erase the element at position x.
                player.getBullets().erase(player.getBullets().begin() + x);

            }
        }
    }

最佳答案

不要重新发明轮子,尤其是那些可以在水下和墙壁上移动的真正困难的轮子。使用现成的:

#include <algorithm>

player.getBullets().erase(
    std::remove_if(player.getBullets().begin(),
                   player.getBullets().end(),
                   [](Projectile * p) -> bool { return !p->getAlive(); }),
    player.getBullets().end());

(我假设 Bulletdecltype(player.getBullets())::value_type 相同,即子弹容器的元素类型。调整适合。)

关于尝试从 vector 中删除时,C++ 访问冲突读取位置 0x003AE000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729101/

相关文章:

c++ - 我在理解特定语法时遇到麻烦

c++ - 如何让 Qt Tree 模型与 QSet 一起工作?

C++ vector : declaring multiple variables with names xxx1, xxx2....xxxN(N 从文件加载)

c++ - 将 vector<int32_t> 转换为 int[] 的最佳方法是什么

c++ - 给定一个不被复制的索引列表,将元素从一个 vector 复制到另一个 vector 的最有效方法

c++ - 第二次打印指针值返回错误结果

c++ - 无法在 VS 代码中使用 gcc 查看 std::vector 的元素

c++ - Qt on VirtualBox 中的 OpenMP 仅使用一个线程

c++ - 如何将对象添加到另一个类中的 vector<object> ?

python - 将字典映射到向量以获得一组索引向量