You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用glClear(GL_COLOR_BUFFER_BIT)触发EXC_BAD_ACCESS错误求助

解决Xcode中调用glClear触发EXC_BAD_ACCESS的问题

你遇到的Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)错误,核心原因是没初始化GLAD。GLAD负责加载OpenGL的函数指针,你现在直接调用glClear时,函数指针还是空值,自然会触发空指针访问错误。

解决方法很简单,在把GLFW窗口上下文设为当前后,立即添加GLAD的初始化代码,具体步骤如下:

  • 在glfwMakeContextCurrent(window);之后,加入GLAD初始化逻辑
  • 检查GLAD是否初始化成功,失败则终止程序

修改后的完整代码:

#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>

int main(void)
{
    GLFWwindow* window;

    /* Initialize GLFW */
    if (!glfwInit())
        return -1;

    /* Create window and OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make window context current */
    glfwMakeContextCurrent(window);

    // 关键:初始化GLAD,加载OpenGL函数指针
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        glfwTerminate();
        return -1;
    }

    /* Main loop */
    while (!glfwWindowShouldClose(window))
    {
        /* Render */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap buffers */
        glfwSwapBuffers(window);

        /* Process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

这样修改后,GLAD会正确加载glClear等OpenGL函数的指针,调用时就不会触发空指针错误,窗口也能正常清除渲染内容了。

内容的提问来源于stack exchange,提问作者Tianyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:03:19