EXC_BAD_ACCESS在使用VBO时

EXC_BAD_ACCESS when using VBO

本文关键字:VBO BAD ACCESS EXC      更新时间:2023-10-16

我用VBO做了一些渲染。现在我想为更复杂的渲染添加VBO。我现在只是创建一个VBO,保持旧的渲染,我现在用VBO渲染什么都没有。下面是代码:

GLuint bufId;
glGenBuffers(1, &bufId);
glBindBuffer(type, bufId);
glBufferData(type, size, 0, GL_STATIC_DRAW);
//size = 100000;

这是关于VBO的唯一代码。但如果最后一笔没有评论,那么我得到EXC_BAD_ACCESS在旧渲染时绘制GL_TRIANGLE_STRIP。我把glGetError()放在这个坏访问之前,它返回0。有什么问题吗?由于

EXC_BAD_ACCESS表示您已经尝试读取或写入未映射到您的进程的内存。

有很多可能发生这种情况的方式,并且glGetError()不可能知道它。

我写这个博客是为了帮助你调试它。它是为iPhone设计的,但它的所有内容也适用于Mac应用程序。

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

关键的一点是EXC_BAD_ACCESS不一定发生在错误发生的地方——导致它的错误可能已经运行,错误的访问正在响应中发生——崩溃点可能根本不相关。我的博客介绍了一些调试技术,以找出问题的真正所在。例如,它可能与GL无关。

在你的代码中,sizetype的值是多少?这可能与此无关。

到目前为止运行的所有代码中需要检查的内容

  1. 一个双重释放
  2. 数组越界读写
  3. 不好投

我找到问题了。你必须取消绑定VBO,如果你想绘制它:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

之后一切正常