对于每个循环读取访问冲突
for each loop read access violation
我一直在编写引擎并遇到了问题,我的代码中出现了读取访问冲突。我不知道为什么,但是当我将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 循环中将元素添加到你的块向量中。因此,循环内部的向量更改和循环使用的迭代器将失效。
相关文章:
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 0xC0000005:访问冲突读取位置0x0000000000000008
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- vc++ 访问冲突读取位置
- C++ - 智能指针 - 访问冲突读取位置0xDDDDDDDD
- C++访问冲突读取位置错误
- 实验室中0x6BE20E11 (ucrtbased.dll) 的未处理异常.exe: 0xC0000005:访问冲突读取
- 0xC0000005:访问冲突读取位置0x0000000000000000.C++
- 在 DirectXGame.exe 中0x00B84CD6出现未经处理的异常:0xC0000005:访问冲突读取位置0x
- 存储类对象的C++模板链表-未处理的异常访问冲突读取位置
- 获取访问冲突读取位置0x000000b0与 glutMouseFunc
- C++访问冲突读取位置
- 无法修复访问冲突读取位置错误
- Dijkstra 中0x001e1078 s_Algorithm.exe的未处理异常:0xC0000005:访问冲突读取位置0xbaadf00d
- 0xC0000005:访问冲突读取位置0x00000000哈希函数
- 访问冲突读取位置0x00000002