Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C glVertexArrays,出界。无效索引_C_Opengl - Fatal编程技术网

C glVertexArrays,出界。无效索引

C glVertexArrays,出界。无效索引,c,opengl,C,Opengl,这是我正在研究的有趣的事情 varray.c: static GLint vertices[] = {25, 25, 100, 325, 175, 25, 175, 325, 250, 25, 325, 325}; glEnableClientState (

这是我正在研究的有趣的事情

varray.c:

   static GLint vertices[] = {25, 25,
                       100, 325,
                       175, 25,
                       175, 325,
                       250, 25,
                       325, 325};
   glEnableClientState (GL_VERTEX_ARRAY);
   glVertexPointer (2, GL_INT, 0, vertices);
这有6个顶点元素。 现在如果我画

glDrawArrays (GL_TRIANGLES, 0, 6);
它正在按预期工作

现在如果我给你一些

glDrawArrays (GL_TRIANGLES, 0, 126);
我已经要求GLDrawArray绘制126个元素。记忆中不存在的。 OpenGL如何处理这样的情况

  • 它是否进行了一些数组计算,并且知道它有6个元素?在这种情况下,它忽略了剩余的120
  • 还是会继续画垃圾
我想说,对
glDrawArrays()
的第二次调用遇到了未定义的行为,因为函数将尝试读取超出
顶点的
边界

它是否进行了一些数组计算,并且知道它有6个元素

它不能,因为
顶点
通过向下传递到
glvertexpinter()
而衰减为C指针。从一个C指针上,不可能得出它指向多少已分配内存的任何信息


真倒霉,应用程序没有崩溃。

谢谢您的回复。它不会崩溃,但它只是给出了一个完美的结果。那么,有什么方法可以捕捉程序员的错误吗?@user2983543:使用Valgrind()之类的内存检查器运行程序,看看上面是怎么说的。我在第一个数组之后立即定义了另一个数组(并显示为int memory。但它不显示垃圾,因此显然它会通过程序内存进行循环。@user2983543:“未定义的行为”不一定意味着程序必须崩溃,但或多或少一切都可能发生。标题提到了
glvertexarray
,而手头的问题涉及
glDrawArrays