“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,&vertexBuffer);
我对opengl编程还是很陌生,所以如果可以的话,请把它分解成自闭症的小片段:)
【问题讨论】:
glGenBuffers(1,&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 处的第一次机会异常”我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章