You are dereferencing NULL (referencing the data pointed to by a pointer that is set to NULL). I just had a long thread about it and got very good explanations of what is going on and why. It might help you out since you seem to be having the same problem:
Pretty much if you see an "access violation" it means your program is trying to access memory that is not allocated to it. If the address is 0x00000000 then that is 0 or NULL and you can assume you are trying to access data pointed to by a pointer somewhere that is set to NULL.
|3|| * Pointers store memory addresses. Here I am setting this one to 0, or|
|4|| * 0x00000000 or NULL.|
|6|| int *IMAPointer = NULL;|
|9|| * Here I am trying to store the value 5 in the address pointed to by|
|10|| * IMAPointer. Since the address is NULL or 0 or 0x00000000 it results in|
|11|| * a memory access violation - my program doesn't have permission from|
|12|| * the operating system to access address 0x00000000.|
|14|| *IMAPointer = 5; // Crash!!! :'(|
It appears that the BITMAP you are trying to blit() is NULL, which means the load failed and likely the path/filename you supplied load_bitmap() is wrong (or something else is wrong - i.e. read permissions).
In VC++ 7.1 I have to start relative paths to files from the same directory as my project files. Make sure that h_sprite.bmp is in the same directory as your project files (.sln, .vcproj, etc.).