I have received a library in dll format with a .h header file. When I instantiate an object from one of the classes I get an access violation error. It is a run time error; the program compiled bug free. The program even runs. It is just at the exact instant that the command to instantiate (or point if I should use a pointer ) executes, then the access violation occurs.

I am using MS Visual C++ express edition. Windows help says that this error occurs when an ATL Composite control attempts to create a licenced control. This usually only happens on computers without visual C++ installed on them. Could this be because the origional programmer used Visual C++ proffesional edition and now I am using express edition? Or is it something else entirely.

The value 0xcccccc usually is an uninitialized or bad variable. Its not likely that its the compiler difference, but, if the control is a licensed control then I suspect because the DLL was not installed properly on your computer. If that's not the case then I have no idea about the problem.

im having a similar problem with access violations.

Im following a tutorial over SDL. It seems like 'screen' and 'background' are being initialized wrong but I dont know what I can do to correct it. 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;

}
This article has been dead for over six months. Start a new discussion instead.