在我选择在MVS2010中调试崩溃后,请查看此崩溃图像: http://i48.tinypic.com/dr8q9u.jpg
这是显示Game类结构的Game.h标题,在图片中您将看到导致访问冲突的违规方法(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();
};
从botInfo(另一个类)的实例我用这个代码调用一个函数, (Game _dsbTrench是botInfo实例的成员变量。)
botInfo * botPointer = this;
_dsbTrench->setBot(botPointer);
问题是,每当我调用它时都会导致异常: MERVBot.exe中0x72332569(PubBot.dll)的未处理异常:0xC0000005:访问冲突写入位置0xcdcdcdd5。
那么这个错误的原因是什么?我该如何解决?
感谢。
答案 0 :(得分:3)
有关各种存储器状态0xCDCDCDCD,0xDDDDDDDD等的更多详细信息,这是一个很好的参考:
答案 1 :(得分:2)
0xCDCDCDCD是MS C运行时用于填充新分配的内存的标志值。在你的“_dsbTrench-> setBot(botPointer);”中,_dsbTrench是0xCDCDCDCD - 这显然是一个虚假的指针。有可能忘记初始化该变量。
答案 2 :(得分:0)
我认为没有足够的信息可以帮助我。但我会尝试。
您正在写入操作系统未分配给您的程序的内存 - 您需要在写入内存之前分配内存。
- 编辑 -
如其他答案所述,“0xCDCDCDCD”是用于未初始化单词的标记变量。
答案 3 :(得分:0)
你调试了那段代码吗?当你为它调用setBot方法时,似乎_dsbTrench为null。传递“this”指针即可,只要你知道你在做什么:)