gpt4 book ai didi

c++ - std::string 的声明导致 OpenGL 出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:56 25 4
gpt4 key购买 nike

考虑一个非常简单的 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 处理之前,我在主函数中引入了三个变量。代码变为:

#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 代码,那么它运行良好。但是,如果我删除除了一行之外的所有 OpenGL 代码,例如 glutInit(&argc, argv);,那么它仍然会导致段错误。

对正在发生的事情有什么想法吗?

最佳答案

我也有类似的问题,但我的是在 Linux 上。你是在 Linux 还是 Windows 上?有没有安装显卡驱动?

就我而言,我在安装了 nVidiaUbuntu 上运行,我注意到当我将我的程序与 libGL.so 链接时位于/usr/lib/x86_64-linux-gnu,会导致segmentation fault。然后我还发现还有一个 libGL.so 位于 /usr/lib/nvidia-352 ,这将链接而不会崩溃。

希望这对您有所帮助。

关于c++ - std::string 的声明导致 OpenGL 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30950191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com