我在c ++中遇到了一个奇怪的内存访问错误和opengl。 这是一个最小的例子:
#include <GL/freeglut.h>
#include <iostream>
void draw(){
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int main()
{
std::string test = "memory access error";
//init glut, display and so on
int my_argc = 0;
glutInit(&my_argc, NULL);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutInitWindowSize(1280, 1024);
glutCreateWindow("test");
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glutDisplayFunc(draw);
glutMainLoop();
return 1;
}
它应该只是绘制一个蓝色背景,但是在编译之后我得到了一个内存访问错误:
g++ opengl_test.cpp -o opengl_test -lGL -lglut
但如果std::string test = "memory access error"
被注释掉,一切都按预期工作....
此外,如果我不针对-lGL构建,一切都很好......
系统:
Ubuntu 14.04 - 3.13.0-123-generic
OpenGL 4.5.0
NVIDIA-Treiber 375.66
GDB输出:使用-g3
和-ggdb
(gdb) b main
Haltepunkt 1 at 0x400d1b: file opengl_test.cpp, line 11.
(gdb) b draw
Haltepunkt 2 at 0x400d01: file opengl_test.cpp, line 5.
(gdb) run
Starting program: /my_opengl/opengl_test
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
有什么想法?!任何人都可以重现错误吗?
我在另一台计算机上测试了它并且还存在内存访问错误......