S'il vous plaît voir cette image de l'accident après avoir choisi de déboguer dans MVS2010: http://i48.tinypic.com/dr8q9u.jpgécriture à un pointeur de classe me donne une erreur de violation d'accès
est ici l'en-tête Game.h qui montre la structure de classe de jeu, et Dans l'image, vous verrez la méthode incriminée qui provoque la violation d'accès (setBot(botInfo * b)
).
class botInfo; // Forward declaration
class Game {
int gameState;
int flagDropTime;
botInfo * bot;
public:
Game();
~Game(void);
void startGame();
void gameOver(int victoriousTeam);
void resetBall();
void hideBall();
int getState();
void setBot(botInfo * bot);
botInfo * getBot();
};
d'une instance de botInfo (autre classe) J'appelle une fonction avec ce code, (jeu _dsbTrench est une variable membre de l'instance botInfo).
botInfo * botPointer = this;
_dsbTrench->setBot(botPointer);
Le problème est, chaque fois que j'appelle cela, il fait une exception: exception non gérée à 0x72332569 (PubBot.dll) en MERVBot.exe: 0xC0000005: violation d'accès emplacement d'écriture 0xcdcdcdd5.
Alors, quelle est la cause de cette erreur? Et comment puis-je le réparer?
Merci.
Je n'ai pas alloué la mémoire pour _dsbTrench, je viens déclarai à l'aide du jeu _dsbTrench. Je suis nouveau en C++ et classes en C++, mais je pensais que je une fois que je déclare la classe son constructeur est automatiquement appelé? – Weasal
si la déclaration ne fournit aucun argument, son constructeur par défaut est automatiquement appelé, oui. A condition qu'il n'y ait pas de constructeurs - ou s'il y a des constructeurs, c'est soit un constructeur par défaut spécifié par vous, soit un défaut plus d'autres. –
Oui, ça a réglé le problème. J'ai déclaré _dsbTrench = new Game(); avant d'utiliser _dsbTrench-> setBot() et cela a fonctionné. Merci – Weasal