Sean Kwon
Sean Kwon

Reputation: 3

SDL load bmp problems

I've been following the lazy foo SDL tutorials and have already hit a road block in lesson 2. My code is exactly what he wants, yet i keep getting the same errors whenever i'm trying to blit the following images:

Unhandled exception at 0x68126030 in SDLtest.exe: 0xC0000005: Access violation reading location 0x00000004.

Here is the following code that is constantly producing such errors:

#include "SDL.h"
#include <string>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;

SDL_Surface *load_image(std::string filename)
{
    SDL_Surface* loadedImage = NULL;
    SDL_Surface* optimizedImage = NULL;
    //load the image
    loadedImage = SDL_LoadBMP( filename.c_str() );

    if (loadedImage != NULL)
    {
        optimizedImage = SDL_DisplayFormat(loadedImage);
        SDL_FreeSurface(loadedImage);
    }
    return optimizedImage;
}

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
    SDL_Rect offset;

    offset.x = x;
    offset.y = y;
    //blit the surface
    SDL_BlitSurface(source, NULL, destination, &offset);
}

int main(int argc, char* args[])
{
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        return 1;
    }

    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);

    if (screen = NULL)
    {
        return 1;
    }

    SDL_WM_SetCaption("Hello World",NULL);
    //loading images
    message = load_image("hello.bmp");
    background = load_image("background.bmp");
    //image blitting
    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_surface(180,140,message,screen);

    if (SDL_Flip(screen) == -1)
    {
        return 1;
    }

    SDL_Delay(2000);

    SDL_FreeSurface(message);
    SDL_FreeSurface(background);

    SDL_Quit();
    return 0;
}

Upvotes: 0

Views: 1622

Answers (2)

Martin Delille
Martin Delille

Reputation: 11780

Replace the line

if(screen = NULL)

with

if(screen == NULL)

Upvotes: 0

Bill
Bill

Reputation: 14685

The error Access violation reading location 0x00000004 is saying that you are dereferencing a pointer whose value is 4, instead of something real.

The easiest way to track this down is to run under a debugger, and see what line causes the problem. Then you can backtrack to figure out where the pointer's value got messed up. Then you may find an error like Bert pointed out.

Upvotes: 2

Related Questions