This question already has answers here:
Range-based for loop and std::vector.push_back() crashing the program
                                
                                    (2个答案)
                                
                        
                                去年关闭。
            
                    
我一直在编写引擎并遇到问题,我的代码中遇到读取访问冲突。我不知道为什么,但是当我在这个代码块中添加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();
}

关于c++ - 每个循环的读取访问冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49077897/

10-13 03:31