调用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
相关产品推荐
相关产品推荐

