gpt4 book ai didi

c++ - glCreateShader 导致 EXC_BAD_ACCESS

转载 作者:太空宇宙 更新时间:2023-11-04 13:13:55 25 4
gpt4 key购买 nike

我在 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 版本。现在会有问题吗?

最佳答案

错误是内存之一。检查 glCreateShader() 的返回值。 This说,“如果没有留下要检索的标记,则返回一个空指针。”This说:

  • 指针可能从未被初始化。
  • 指针可能被意外覆盖,因为您越过了数组的边界。
  • 指针可能是被错误转换然后被写入的对象的一部分。
  • 上述任何一项都可能破坏现在指向或靠近该指针的不同指针,使用该指针会破坏该指针(依此类推)。

关于c++ - glCreateShader 导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405355/

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