glCreateShader导致EXC_BAD_ACCESS

时间:2016-07-15 21:37:28

标签: c++ opengl

我在OpenGL中有一个项目,我正在尝试加载着色器。我使用GLuint shader=glCreateShader(shaderType);。问题是,当它尝试运行此行时,我得到 EXC_BAD_ACCESS(code = 1,address = 0x0)错误(在XCode中)。

我找到了一些我可能没有初始化glfw或glew的答案。但似乎它运作得很好。这是我的初始化代码:

if (!glfwInit()) {
        fprintf(stderr, "Couldn't initialize GLFW.\n");
        exit(EXIT_FAILURE);
    }

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwSetErrorCallback(errorCallback);
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL Test", nullptr, nullptr);

    if (!window) {
        fprintf(stderr, "Couldn't create window.\n");
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwMakeContextCurrent(window);
    glfwSwapInterval(1);

    if (glewInit() != GLEW_OK) {
        fprintf(stderr, (char*)"Couldn't initialize GLEW library.\n");
        exit(EXIT_FAILURE);
    }

    initOpenGLProgram(window);
initOpenGLProgram()中的

glClearColor(0, 0, 0, 1);
glEnable(GL_DEPTH_TEST);
glfwSetKeyCallback(window, keyCallback);

shaderProgram = new ShaderProgram((char*)"shaders/vshader.glsl", NULL, (char*)"shaders/fshader.glsl");

在新ShaderProgram中:

printf("Loading vertex shader...\n");
vertexShader=loadShader(GL_VERTEX_SHADER,vertexShaderFile);

并在loadShader方法中(此行引发错误):

GLuint shader=glCreateShader(shaderType);

我也有一个问题。我需要在OpenGL 3.3中完成我的项目,但是当我用glGetString(GL_VERSION)检查版本时,我得到 4.1 版本。现在会有问题吗?

2 个答案:

答案 0 :(得分:0)

错误是记忆之一。检查glCreateShader()的返回值。This说:“如果没有要检索的令牌,则会返回空指针。”This说:

  • 指针可能从未初始化。
  • 由于你超越了数组的边界,指针可能被意外地写了。
  • 指针可能是未正确投放的对象的一部分,然后写入。
  • 上述任何一个都可能损坏了一个不同的指针,该指针现在指向该指针或该指针附近,使用该指针会破坏这个指针(依此类推)。

答案 1 :(得分:0)

我发现了一个问题。在我的例子中,这是XCode中糟糕的项目配置。 我有2个 libGlew dylibs链接。

libraries

当我删除libGLEWmx.1.13.0.dylib时,一切都开始工作了。