0xC0000005: violation d'Accès au lieu de lecture d'un nombre Entier?

Il semble que, normalement, les gens reçoivent ces erreurs lorsque l'on travaille avec des pointeurs de tableau, les structures, etc. Je suis arriver sur tout entier dans une classe, ce qui me confond. Je suis sûr que je suis juste en manque quelques petits détails techniques (je suis un peu nouveau pour cette).

L'erreur exacte est:

First-chance exception at 0x003e6616 in Mine.exe: 0xC0000005:
    Access violation reading location 0x00000008.
Unhandled exception at 0x003e6616 in Mine.exe: 0xC0000005:
    Access violation reading location 0x00000008.

Le code s'arrête à la première ligne de cette méthode de classe:

void Grid::Move(int x, int y)
{
this->offX+=x;
this->offY+=y;
for (int i=0;i<2;i++)
    for (int k=0;k<2;k++)
        BitmapSetxy(chunks[i][k]->map,this->offX,this->offY);
}  

Ici est le constructeur de la Grille:

Grid::Grid()
{
totalW =320*2;
totalH = 320*2;
offX = 0;
offY = 0;

//Fill the chunks array with Maps to be used
for (int i=0;i<2;i++)
    for (int k=0;k<2;k++)
        chunks[i][k] = new Map(i*320,k*320);

//Everything starts as dirt
for (int x=0;x<(320*2)/20;x++)
    for (int y=0;y<(320*2)/20;y++)
        blocks[x][y] = bType::Dirt; 
}

Et le fichier d'en-tête:

#ifndef MapDef
#define MapDef

#include "Map.h"

class Grid
{
private:
int totalW, totalH;
int offX, offY; 
public:
enum bType
{
    Blank,
    Dirt,
    Copper
};

Map * chunks[2][2];
bType blocks[32][48];   
void RemoveBlock(int x, int y);
bType GetBlockAt(int x, int y);
int GetAbsolutePosition20(int);
int GetMapIndex(int);
int GetChunkRelative(int,int);
bType GetBlockBelow(int x, int y);
bType GetBlockAbove(int x, int y);
bType GetBlockSide(int x, int y, bool isRight);
void Move(int x, int y);
Grid();
};

#endif

Lorsque l'on regarde les locaux de vue de l'instance courante de la Grille totalW, totalH, offX,offY tous le CXX0030 d'erreur, mais les deux tableaux sont parfaitement bien. Ce qui se passe exactement ici?

EDIT:

La définition de la grille pointeur est stocké dans un autre peu d'espace de noms qui constitue en quelque sorte une classe statique:

namespace Engine
{       
static Grid * grid;
static Player * player;
}

Il est effectivement créés ici dans le fichier principal rpc:

//Initialize engine
Engine::grid = new Grid();
Engine::player = new Player(160,240);

Voici l'extrait où il est appelé, dans une autre classe appelée Joueur

    if (y>392 && y<480 && x>75 && x<152)
    {
        printf("Right");
        Engine::grid->Move(20,0);
    }

Edit 2:

Je suis désolé, j'ai oublié de supprimer le mot-clé "statique à partir de la grille de déclaration dans le moteur. Je crois que c'était ce qui était à l'origine du problème.

Qu'est-ce que la pile d'appel de l'accident? Pouvez-vous montrer le code qui appelle le Déplacer?
par ailleurs, il est 0x00000008 parce que, entre le début de la classe et offX il y a 2 ints. Si quelqu'un me demandais...
Il semble sûrement comme si vous avez un pointeur null pour this; l'accès à 0x00000008 est correct pour l'ajout de 8 octets à 0 pour lire la valeur actuelle de this->offX avant d'en rajouter.
Si vous avez résolu le problème?
Je suis à obtenir des objets déjà définis problèmes, mais le problème initial est résolu. merci

OriginalL'auteur Fuller | 2011-05-28