Access violation reading location

Hello. I just started learning game development with OpenGL and SDL, but I got problem loading textures. I was got this error developing other c++ applications, and do not know how to fix it. I got this error:
Unhandled exception at 0x779315de in OpenGL.exe: 0xC0000005: Access violation reading location 0x00196002.

On this line: glTexImage2D(GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels);

And here is full loadtexture function:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
GLuint loadTexturee(const string& fileName){
	GLuint texture;
	SDL_Surface *surface;
	GLenum texture_format = GL_RGB;
	GLint nOfColors;
 
	if((surface = SDL_LoadBMP(fileName.c_str()))){
		//Check that the image's width is a power of 2
		if((surface->w & (surface->w - 1)) != 0) cout << "warning: image.bmp's width is not a power of 2\n";
		//Also check if the height is a power of 2
		if((surface->h & (surface->h - 1)) != 0) cout << "warning: image.bmp's height is not a power of 2\n";
 
		//Get the number of channels in the SDL surface
		nOfColors = surface->format->BytesPerPixel;
		if(nOfColors == 4){ //Contains an alpha channel
			if(surface->format->Rmask == 0x000000ff)
				texture_format = GL_RGBA;
			else
				texture_format = GL_BGRA;
		}else if(nOfColors == 3){ //No alpha channel
			if(surface->format->Rmask == 0x000000ff)
				texture_format = GL_RGB;
			else
				texture_format = GL_BGR;
		}else{
			cout << "warning: the image is not truecolor..  this will probably break\n";
			//This error should not go unhandled
		}
 
		//Have OpenGL generate a texture object handle for us
		glGenTextures(1, &texture);
 
		//Bind the texture object
		glBindTexture(GL_TEXTURE_2D, texture);
 
		//Set the texture's stretching properties
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 
		//Edit the texture object's image data using the information SDL_Surface gives us
		glTexImage2D(GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels);
		if(surface) SDL_FreeSurface(surface);
		return texture;
	}else{
		cout << "SDL could not load image.bmp: " << SDL_GetError() << endl;
		if(surface) SDL_FreeSurface(surface);
		//SDL_Quit();
		//return 1;
	}

	return -1;
}


Maybe someone had same problem and know how to fix it?
Topic archived. No new replies allowed.