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

时间:2018-03-02 21:47:56

标签: c++ c++11

我一直在编写引擎并遇到问题,我的代码中出现了读取访问冲突。我不明白为什么,但是当我将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->chunksstd::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]);
    }
}   

2 个答案:

答案 0 :(得分:1)

其他人说过你的程序崩溃的原因。这取决于你想要做的两个可能的解决方案:

如果你想让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();
}   

答案 1 :(得分:0)

问题是你在for循环中向你的块向量中添加元素。因此循环内的向量更改和循环使用的迭代器变为无效。