对于每个循环读取访问冲突

for each loop read access violation

本文关键字:访问冲突 读取 循环 于每个      更新时间:2023-10-16

我一直在编写引擎并遇到了问题,我的代码中出现了读取访问冲突。我不知道为什么,但是当我将this->chunks.push_back(chunk);添加到此代码块中时,就会发生这种情况,

void c_world::generate_world()
{   
    this->chunks.resize(MAX_CHUNKS);
    for (auto chunk : this->chunks)
    {
        chunk.setup_landscape();
    }
}   

所以它变成了...

void c_world::generate_world()
{   
    this->chunks.resize(MAX_CHUNKS);
    for (auto chunk : this->chunks)
    {
        chunk.setup_landscape();
        this->chunks.push_back(chunk);
    }
}   

this->chunks是一个自定义类std::vector<c_chunk>(c_chunk(。谢谢!

所有的帮助都表示赞赏。

编辑:这是正确的方法。

void c_world::generate_world()
{   
    for (std::uint32_t i = 0; i < MAX_CHUNKS; i++)
    {
        c_chunk chunk[MAX_CHUNKS];
        chunk[i].setup_landscape();
        this->chunks.push_back(chunk[i]);
    }
}   

其他人说了为什么你的程序崩溃了。以下是取决于您想要执行的两种可能的解决方案:

如果你想让MAX_CHUNKS未初始化,然后MAX_CHUNKS初始化,请使用一个简单的 for 循环。

void c_world::generate_world()
{   
    this->chunks.resize(MAX_CHUNKS);
    for (int i = 0;i < MAX_CHUNKS;i++)
    {
        this->chunks.push_back(this->chunks[i])
        this->chunks[i+MAX_CHUNKS].setup_landscape();
    }
}   

如果要初始化MAX_CHUNKS,则:

void c_world::generate_world()
{   
    this->chunks.resize(MAX_CHUNKS);
    for(auto &chunk : this->chunks)
        chunk.setup_landscape();
}   

问题是你在 for 循环中将元素添加到你的块向量中。因此,循环内部的向量更改和循环使用的迭代器将失效。