Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;opengl/glsl/sdl代码中的访问冲突_C++_Opengl_Glsl_Access Violation - Fatal编程技术网

C++ C++;opengl/glsl/sdl代码中的访问冲突

C++ C++;opengl/glsl/sdl代码中的访问冲突,c++,opengl,glsl,access-violation,C++,Opengl,Glsl,Access Violation,我正在关注一些关于GLSL的在线教程。我一直在将代码实现到我当前的程序中。它编译得很好,但当我调试它时,会遇到访问冲突: First-chance exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation. Unhandled exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation. 我不知道为

我正在关注一些关于GLSL的在线教程。我一直在将代码实现到我当前的程序中。它编译得很好,但当我调试它时,会遇到访问冲突:

First-chance exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation.
Unhandled exception at 0x00000000 in Game Engine v0.2a.exe: 0xC0000005: Access violation.
我不知道为什么。这是它所指的线:

GLuint v,f,f2,p,ge;
int gw = RESOLUTION_X;
int gh = RESOLUTION_Y;

void setShaders() 
{
    char *vs = NULL, *fs = NULL, *fs2 = NULL, *gs = NULL;

    v  = glCreateShader(GL_VERTEX_SHADER); //<-- this line
    f  = glCreateShader(GL_FRAGMENT_SHADER);
    ge = glCreateShader(GL_GEOMETRY_SHADER_EXT);

...
GLuint v,f,f2,p,ge;
int gw=分辨率X;
int gh=分辨率_Y;
void setShaders()
{
char*vs=NULL,*fs=NULL,*fs2=NULL,*gs=NULL;

v=glCreateShader(GL_VERTEX_SHADER);//也许您忘记调用了?或者可能从多个线程调用此函数?

我想说,glCreateShader是指向函数的空指针。这是一个并非所有驱动程序都支持的函数,因此您应该使用某种GL扩展包装,例如优秀的GLEW


在使用扩展之前,您应该检查当前实现是否支持该扩展:在您的情况下,它是一个GL2.0函数,因此:
if(GLEW\u VERSION\u 2\u 0)…

+1;调用地址0x00时引发异常的事实强化了这一假设;这可能是因为
glCreateShader
是一个初始化为空的指向函数。事实上,这是真的。我在sdl init之前调用了glew init。我一生中从未使用过sdl,甚至从未尝试过,但看到了大量的问题我们的SDL以前就这样崩溃了,每次结果都是
SDL_Init
。所以我们开始:)哈,幸好我决定在标题中注明是SDL。谢谢!