我一直在编写引擎并遇到问题,我的代码中出现了读取访问冲突。我不明白为什么,但是当我将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]);
}
}
答案 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循环中向你的块向量中添加元素。因此循环内的向量更改和循环使用的迭代器变为无效。