Im following an SDL tutorial and I seem to receive these errors when building..
First-chance exception at 0x68129afb in Hello World2.exe: 0xC0000005: Access violation reading location 0x00000004.
Unhandled exception at 0x68129afb in Hello World2.exe: 0xC0000005: Access violation reading location 0x00000004.
I dont know what im doing wrong but VC points to the SDL_Flip function. Any help would be appritiated.
Here is the full code.
//The headers
#include "SDL.h"
#include <string>
//The attributes of the screen
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//The surfaces that will be used
SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;
SDL_Surface *load_image(std::string filename)
{
//Temporary storage for the image that's loaded
SDL_Surface* loadedImage = NULL;
//The optimized image that will be used
SDL_Surface* optimizedImage = NULL;
//Load the image
loadedImage = SDL_LoadBMP(filename.c_str());
//If nothing went wrong in loading the image
if( loadedImage != NULL )
{
//Create an optimized image
optimizedImage = SDL_DisplayFormat( loadedImage );
//Free the old image
SDL_FreeSurface( loadedImage );
}
//Return the optimized image
return optimizedImage;
}
void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
//Make a temporary rectangle to hold the offsets
SDL_Rect offset;
//Give the offsets to the rectangle
offset.x = x;
offset.y = y;
//Blit the surface
SDL_BlitSurface(source, NULL, destination, &offset);
}
int main(int argc, char* args[])
{
//Initialize all SDL subsystems
if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
return 1;
}
//Set up the screen
screen = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE);
//If there was an error in setting up the screen
if(screen = NULL)
{
return 1;
}
//Set the window caption
SDL_WM_SetCaption("Hello World 2",NULL);
//Load the images
message = load_image("hello_world.bmp");
background = load_image("background.bmp");
//Apply the background to the screen
apply_surface(0,0,background,screen);
//apply_surface(320,0,background,screen);
//apply_surface(0,240,background,screen);
//apply_surface(320,240,background,screen);
//Apply the message to the screen
//apply_surface(180, 140, message, screen);
//Update the screen
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
//Wait 3 seconds
SDL_Delay(3000);
//Free the surfaces
SDL_FreeSurface(message);
SDL_FreeSurface(background);
//Quit SDL
SDL_Quit();
//Return
return 0;
}