首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >for循环中的动态数组分配会引发错误。

for循环中的动态数组分配会引发错误。
EN

Stack Overflow用户
提问于 2012-02-26 10:13:40
回答 4查看 829关注 0票数 2

我有这个循环:

代码语言:javascript
运行
复制
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]值更多的值。(我查过了)。如何正确删除这样的循环中的动态数组。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-26 12:25:07

问题已经解决。这是一个先前的new[]调用(在另一种方法中),它没有适当的大小,这导致了这里的问题。非常感谢你们的帮助!

票数 0
EN

Stack Overflow用户

发布于 2012-02-26 11:49:24

可能与此无关,但这一行中可能存在读取缓冲区溢出:

代码语言:javascript
运行
复制
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GL_UNSIGNED_INT) * indexCount[l], indices, GL_STATIC_DRAW);

我不知道sizeof(GL_UNSIGNED_INT)如何与系统上的sizeof(GLuint)相比较,但请查看代码中的此类错误。

票数 1
EN

Stack Overflow用户

发布于 2012-02-26 11:32:05

因为它在下面的行上抛出一个内存异常:

代码语言:javascript
运行
复制
GLuint* indices = new GLuint[indexCount[l]];

我看到有两件(与记忆有关的)事情可能出错:

  1. 是indexCount中的一种越界访问。您确定已经为indexCount分配了空间吗?当此异常抛出时,您确定它的大小大于l吗?尝试调试和检查,以确保indexCount不是空的,并且在异常抛出之前,l不大于indexCount的大小。看看它是在for循环的第一次迭代中还是在中间的iteration.
  2. C++'s new中无法分配足够的内存。这是我从这一行代码中看到的唯一与内存相关的错误。然而,我不认为错误消息可能与没有足够的内存分配有关,所以我怀疑它是否是这个错误。

您确实需要调试才能获得更多信息。

  • 被访问时(当异常抛出时),
  • 会在for循环
  • 的第一个值或中间值上抛出异常是否为indexCount null?
  • 检查indexCount的大小和分配位置,并确保l不大于此大小。

F 217

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9452243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档