“0x00000000 处的第一次机会异常”我做错了啥?

Posted

技术标签:

【中文标题】“0x00000000 处的第一次机会异常”我做错了啥?【英文标题】:"First-chance exception at 0x00000000" What am I doing wrong?“0x00000000 处的第一次机会异常”我做错了什么? 【发布时间】:2013-12-04 22:00:32 【问题描述】:

这是我目前的代码,它只是来自 open.gl 的教程代码

#include <GL/GL.h>
#include <GL/glew.h>    
#include <GLFW/glfw3.h>
#include <thread>
#define GLEW_STATIC

int main()
    //printf("%s\n", glGetString(GL_EXTENSIONS))
    glewExperimental = GL_TRUE;

    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr); // Windowed
    //GLFWwindow* window = glfwCreateWindow(1920, 1080, "OpenGL", glfwGetPrimaryMonitor(), nullptr); fs

    //typedef void (*GENBUFFERS) (GLsizei, GLuint*);
    //GENBUFFERS glGenBuffers = (GENBUFFERS)glfwGetProcAddress("glGenBuffers");

    printf("%s\n", glGetString(GL_EXTENSIONS));

    glfwMakeContextCurrent(window);


    glewInit();


    GLuint vertexBuffer;

    glGenBuffers(1, &vertexBuffer);
    printf("%u\n", vertexBuffer);

    float vertices[] = 
     0.0f,  0.5f, // Vertex 1 (X, Y)
     0.5f, -0.5f, // Vertex 2 (X, Y)
    -0.5f, -0.5f  // Vertex 3 (X, Y)
    ;


    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);


    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);



    //glfwSetWindowShouldClose(window, GL_FALSE);


    while(!glfwWindowShouldClose(window))
    glfwSwapBuffers(window);
    glfwPollEvents();
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
    


    glfwTerminate();

返回上面的异常...发生了什么,出了什么问题?

错误落在glGenBuffers(1,&amp;vertexBuffer);

我对opengl编程还是很陌生,所以如果可以的话,请把它分解成自闭症的小片段:)

【问题讨论】:

glGenBuffers(1,&amp;buffer) 在您向我们展示的代码中不存在。所以现在我想知道还有什么不匹配的?形成问题时请多加注意。 这意味着您正在尝试访问空指针。虽然看起来你改变了你的代码,因为 glGenBuffers(1,&buffer) 不存在。 只是引用的不同名称,我使用了不同的名称,我不欣赏讽刺粗心的言论。下次检查方法而不是名称:) 【参考方案1】:

位置 0 发生的错误表明您正在尝试使用空函数指针调用函数。你的罪魁祸首似乎是glGenBuffers。它已经在核心中存在了很长时间,因此几乎可以肯定您的机器支持它。它可能只是没有正确初始化。

您可以获得诸如 GLEW(GL Extension Wrangler)之类的库来帮助您。这不是您应该长期依赖的东西,但绝对可以帮助您入门,而不必担心很多细节。

或者,一个非常快速和肮脏的解决方案可能只是调用glGenBuffersARB()。同样,这绝对不是长期依赖的东西!

这些问题可能会有所帮助:

glGenBuffers not defined? OpenGL: How to check if the user supports glGenBuffers()?

【讨论】:

以上是关于“0x00000000 处的第一次机会异常”我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

Firestore - 我做错了啥?

单对象 json 解析 - 我做错了啥?

将自定义标头添加到 AFNetworking,我做错了啥?

这个Lua代码我做错了啥

django - Ajax 实时搜索,我做错了啥?

QTreeView 的 QAbstractItemModel:我做错了啥?