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++ glBufferData()的分段错误_C++_Opengl_Segmentation Fault_Glut - Fatal编程技术网

C++ glBufferData()的分段错误

C++ glBufferData()的分段错误,c++,opengl,segmentation-fault,glut,C++,Opengl,Segmentation Fault,Glut,我不明白为什么这个代码是seg错误: AxesMarker::AxesMarker(float size) : size_(size), vbo_vertices_(0), vbo_elements_(0) { Vertex vertices[6] = { Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO), Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(si

我不明白为什么这个代码是seg错误:

AxesMarker::AxesMarker(float size)
    : size_(size), vbo_vertices_(0), vbo_elements_(0)
{
  Vertex vertices[6] = { 
      Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO),
      Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(size_, 0.0f, 0.0f)),
      Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f::ZERO),
      Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)),
      Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f::ZERO),
      Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)) };

  GLuint elements[6] = { 0, 1, 2, 3, 4, 5 };

  fprintf(stderr, "sizeof(vertices): %d, sizeof(Vertex): %d", (int) sizeof(vertices), (int) sizeof(Vertex));

  /* create buffers */
  glGenBuffers(1, &vbo_vertices_);
  glGenBuffers(1, &vbo_elements_);

  /* bind buffers */
  glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices_);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_elements_);

  /* buffer data */
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW);

  /* unbind buffers */
  glBindBuffer(GL_ARRAY_BUFFER, 0); 
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
}
编译时没有警告,但在第一次调用glBufferData()时似乎存在seg错误。 如果需要,我可以发布更多的代码,我对GL不够熟悉,不知道什么可能是相关的。 谢谢



产生相同的seg错误。

您的Vertex类是普通的旧数据类型吗?它是否有任何虚拟功能,这可能意味着它也有一个vtable?您是否可以尝试使用普通浮点数组重新编写此代码(只是为了测试对glBufferData的调用是否正常工作)。但从我所能看出的情况来看,您似乎正确地使用了glBufferData,但我可能还是漏掉了一些东西

编辑:
在调用此代码之前,是否绝对确保OpenGL上下文已完全初始化。这是一个全局对象,因为它的构造函数可能在main之前被调用吗?

它们都是结构,我会试试。啊,所以这是实时的。那我最好别再那么拼命帮忙了。:)你在用Glew吗?你记得在调用openGL之前调用glewInit吗?我没有这样做,但它没有改变任何事情。。。我只是不明白为什么glBufferData读取的数据超过了数组的末尾。正如我前面所说的,我看不出您调用代码的方式有任何错误。在调用此代码之前,是否绝对确保OpenGL上下文已完全初始化。这是一个全局对象吗,因为它的构造函数可能在main之前被调用?
  GLfloat vertices[60] = { 
     1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
     1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
     0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
     0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
     0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f };