声明std :: string会导致OpenGL

时间:2015-06-20 04:15:17

标签: c++ opengl

考虑一个非常简单的OpenGL程序:

#include <GL/glut.h>

static void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(500, 500);
    glutCreateWindow("OpenGL Test");
    glutDisplayFunc(RenderScene);
    glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
    glutMainLoop();

    return 0;
}

编译并运行正常,按预期显示灰色窗口。

然后,在OpenGL处理​​之前,我将三个变量引入main函数。代码变为:

#include <string>
#include <GL/glut.h>


static void RenderScene()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}


int main(int argc, char** argv)
{
    int x = 5;
    char y = 'a';
    std::string z = "abc";

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(500, 500);
    glutCreateWindow("OpenGL Test");
    glutDisplayFunc(RenderScene);
    glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
    glutMainLoop();

    return 0;
}

编译这很好,但如果我运行它,我会收到分段错误错误。现在,如果我注释掉std::string z = "abc";行,那么它运行正常,没有任何错误。

因此,出于某种原因,声明字符串变量会导致分段错误,但不会导致任何其他变量类型。

如果我删除所有OpenGL代码,那么它运行正常。但是如果我删除除了glutInit(&argc, argv);之外的所有OpenGL代码,那么它仍会导致分段错误。

有关正在发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

我也有类似的问题,但我的是在Linux上。你在Linux或Windows上吗?你有安装任何显卡驱动程序吗?

对于我的情况,我正在安装Ubuntu的{​​{1}}上运行,我注意到当我将程序与位于nVidia的{​​{1}}关联时,会导致分段故障。然后我还发现另一个libGL.so位于/usr/lib/x86_64-linux-gnu,这将链接而不会崩溃。

希望得到这个帮助。