for循环中的动态数组分配引发错误
Dynamic array allocation in a for loop throws an error
我有这个循环:
for(int l = 0; l < level_max; ++l) {
//...
indexCount[l] = (2*patch_size_level+1) * (patch_size_level - 1);
GLuint* indices = new GLuint[indexCount[l]];
//... (for loops in which I fill indices)
delete[] indices;
}
(完整的代码片段可以在这里找到:https://gist.github.com/1915777)
由于某种原因,这会在GLuint* indices = new GLuint[indexCount[l]];
上引发以下内存异常
Demo(12783,0x7fff7367e960)malloc:*对象0x1028cd408的错误:已释放对象的校验和不正确-对象可能已修改在被释放之后。
我做错了什么?我不会为索引数组分配超过indexCount[l]
的值。(我已经检查过了)。如何在这样的循环中正确地删除动态数组。
感谢
可能不相关,但这一行可能存在读取缓冲区溢出:
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GL_UNSIGNED_INT) * indexCount[l], indices, GL_STATIC_DRAW);
我不知道在您的系统上sizeof(GL_UNSIGNED_INT)
和sizeof(GLuint)
相比如何,但请检查您的代码中是否存在此类错误。
因为它在以下行引发内存异常:
GLuint* indices = new GLuint[indexCount[l]];
我看到有两件事(与记忆有关)可能会出错:
indexCount中的越界访问。您确定已为indexCount分配了空间吗?当这个异常抛出时,你确定它的大小大于l吗?尝试调试和检查以确保indexCount不为null,并且l不大于异常抛出前indexCount的大小。看看它是在for循环的第一次迭代中还是在中间迭代中抛出。
C++的
new
无法分配足够的内存。这是我从这行代码中看到的唯一其他与内存相关的错误。然而,我看不出错误消息与没有足够的内存分配有关,所以我怀疑这是不是错误消息。
您确实需要进行调试以获得更多信息。
- indexCount在被访问时为null(当抛出异常时)
- 异常是否引发for循环的第一个值或中间值
- 异常是否真的发生在特定的行上
- 检查indexCount的大小以及分配位置,确保l不大于此大小
添加行
std::cout << current_index << " " << (2*patch_size_level+1) * (patch_size_level - 1) << std::endl;
结果在以下输出中:
你在哪里加的这行?IME current_index
在崩溃前达到8126,indexCount[l]
是2144。以下是我们的产品:
patch_size=64
level_max=5
patch_size_level=33
indexCount[0]=2144
但是您执行内部循环(patch_size * (patch_size-1))
次,即4032次,每个内部循环执行两次current_index
增量,即8000多次。
您可能在某个时刻混淆了patch_size和patch_size_level,但我不确定。
问题已解决。。这是之前的new[]
调用(在另一个方法中),它的大小不合适,导致了这里的问题。非常感谢你们的帮助!
- vector.resize()中的分配错误
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 如何处理以下代码中的内存分配错误
- 动态内存分配错误
- C++向量上的分配错误
- libtorrent file_storage无效:分配错误
- 数组大小分配错误
- 只读位置'__result.std::_Rb_tree_const_iterator<_Tp>::operator*<long long int>()'分配错误
- C++ 内存分配错误?
- 具有特征成员变量分类和分配错误的C 类
- 为什么这种递归子集和算法会导致指针分配错误
- CSTRING分配错误
- 运行时间内存分配错误
- 以下C++代码给出了一些内存分配错误
- 尝试在c++中创建USRP对象时分配错误
- 多阵列动态内存分配错误
- C++:矢量分配错误
- 通过结构指针访问结构变量分配错误数据
- 声明向量时出现神秘的 malloc 内存分配错误