   SDL_Flip() aborts my program with status 3
  I transposed the code from Lazyfoo's Second SDL Tutorial manually, so that I could learn the code better, but it looks like I made a mistake. The program compiles with no errors or warnings. The program does not throw any standard errors. However, whenever I try to run the program, the window briefly appears and disappears, and the build log tells me that the program terminated with status 3. I pinpointed the error coming from the SDL_Flip function. I don't mean that SDL_Flip is returning -1, I mean that it itself is terminating the program with status 3.I substituted my code with the source from the tutorial (in the same project, I just copied & pasted), so I know the problem is with my code, not with the external files or libraries. However, I cannot figure out where my code and the tutorial code differ, except for comments and white space (and one variable name I changed while trying to debug the program). There is no mention of this anywhere in the SDL API and I can't find any mention of it on the SDL forums or on these forums. Any and all help would be appreciated.My code:#include "SDL/SDL.h"#include <string>const int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_BPP = 32;SDL_Surface* hithere = NULL;SDL_Surface* background = NULL;SDL_Surface* screen = NULL;SDL_Surface* load_image(std::string filename){    SDL_Surface* loadedImage = NULL;    SDL_Surface* optimizedImage = NULL;    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;    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;    }    hithere = load_image("hello.bmp");    background = load_image("background.bmp");    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, hithere, screen);    if( SDL_Flip( screen ) == -1 )    {   return 1;    }    SDL_Delay(2000);    SDL_FreeSurface(hithere);    SDL_FreeSurface(background);    SDL_Quit();    return 0;}Lazyfoo's code:/*This source code copyrighted by Lazy Foo' Productions (2004-2009) and may notbe redestributed without written permission.*///The headers#include "SDL/SDL.h"#include <string>//The attributes of the screenconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_BPP = 32;//The surfaces that will be usedSDL_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", NULL );    //Load the images    message = load_image( "hello.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 2 seconds    SDL_Delay( 2000 );    //Free the surfaces    SDL_FreeSurface( message );    SDL_FreeSurface( background );    //Quit SDL    SDL_Quit();    return 0;}I'm using Code::Blocks 8.02 with the included MinGW compiler on an up-to-date Windows XP.    
  Found it!    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);    if(screen = NULL)    {   return 1;    };  Ha, I figured it would be a little error like that. Thanks a lot for finding it.   