Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

0xC0000005: Access violation reading location 0x00000000

I'm having a very strange issue with a space invaders game I'm working on. Basically I get an access violation error:

Unhandled exception at 0x5edad442 (msvcr100d.dll) in SpaceInvaders.exe: 0xC0000005: Access violation reading location 0x00000000.

when I include the piece of code below. visual studio takes me to "strcmp.asm" when debugging. Note that Im not using strcmp() in any of my code. Is there anything wrong with the code, or is this a problem beyond the scope of what I've included? Thanks for any help

const char* invarray[] = {"invader0.png", "invader1.png", "invader2.png", "invader3.png", "invader4.png"};  int i=0; //Creates 55 invaders for (int y=0; y<250; y+=50){     for (int x=0; x<550;x+=50){         Invader inv(invarray[y/50], x+50, y+550, 15, 15, 1, false, 250);         invaders[i] = inv;     } } 

Invader constructor:

Invader::Invader(const char *pic, int x, int y, int w, int h, bool dir, bool des, int point) : MovingObject(pic, x, y, w, h) , direction(dir), destroyed(des), b(0), points(point){}; 

MovingObject Constructor

MovingObject::MovingObject(const char *pic, int x, int y, int w, int h):picture(pic), positionX(x), positionY(y), width(w), height(h) {}; 
like image 318
Milk Avatar asked May 07 '12 08:05

Milk


2 Answers

"Access violation reading location 0x00000000" means that you're derefrencing a pointer that hasn't been initialized and therefore has garbage values. Those garbage values could be anything, but usually it happens to be 0 and so you try to read from the memory address 0x0, which the operating system detects and prevents you from doing.

Check and make sure that the array invaders[] is what you think it should be.

Also, you don't seem to be updating i ever - meaning that you keep placing the same Invader object into location 0 of invaders[] at every loop iteration.

like image 82
Tneuktippa Avatar answered Oct 05 '22 18:10

Tneuktippa


This line looks suspicious:

invaders[i] = inv; 

You're never incrementing i, so you keep assigning to invaders[0]. If this is just an error you made when reducing your code to the example, check how you calculate i in the real code; you could be exceeding the size of invaders.

If as your comment suggests, you're creating 55 invaders, then check that invaders has been initialised correctly to handle this number.

like image 21
Fraser Avatar answered Oct 05 '22 16:10

Fraser