我有这个循环:
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]];
引发以下内存异常
演示(12783,0x7fff7367e960) malloc:*对象0x1028cd408错误:释放对象后可能修改了不正确的校验和。
我做错了什么?我不会给索引数组分配比indexCount[l]
值更多的值。(我查过了)。如何正确删除这样的循环中的动态数组。
谢谢
发布于 2012-02-26 04:25:07
问题已经解决。这是一个先前的new[]
调用(在另一种方法中),它没有适当的大小,这导致了这里的问题。非常感谢你们的帮助!
发布于 2012-02-26 03:49:24
可能与此无关,但这一行中可能存在读取缓冲区溢出:
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GL_UNSIGNED_INT) * indexCount[l], indices, GL_STATIC_DRAW);
我不知道sizeof(GL_UNSIGNED_INT)
如何与系统上的sizeof(GLuint)
相比较,但请查看代码中的此类错误。
发布于 2012-02-26 03:32:05
因为它在下面的行上抛出一个内存异常:
GLuint* indices = new GLuint[indexCount[l]];
我看到有两件(与记忆有关的)事情可能出错:
new
中无法分配足够的内存。这是我从这一行代码中看到的唯一与内存相关的错误。然而,我不认为错误消息可能与没有足够的内存分配有关,所以我怀疑它是否是这个错误。您确实需要调试才能获得更多信息。
当
F 217
https://stackoverflow.com/questions/9452243
复制