写入类指针会给我一个访问冲突错误

时间:2010-02-13 14:35:53

标签: c++

在我选择在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。

那么这个错误的原因是什么?我该如何解决?

感谢。

4 个答案:

答案 0 :(得分:3)

有关各种存储器状态0xCDCDCDCD,0xDDDDDDDD等的更多详细信息,这是一个很好的参考:

http://www.nobugs.org/developer/win32/debug_crt_heap.html

答案 1 :(得分:2)

0xCDCDCDCD是MS C运行时用于填充新分配的内存的标志值。在你的“_dsbTrench-> setBot(botPointer);”中,_dsbTrench是0xCDCDCDCD - 这显然是一个虚假的指针。有可能忘记初始化该变量。

答案 2 :(得分:0)

我认为没有足够的信息可以帮助我。但我会尝试。

您正在写入操作系统未分配给您的程序的内存 - 您需要在写入内存之前分配内存。

  1. 您不应该将此参数传递给其他函数 - 您的偏移计算可能已关闭 - 您不能使用引用吗? 。
  2. 你为dsbtrench分配了内存吗?
  3. - 编辑 -

    如其他答案所述,“0xCDCDCDCD”是用于未初始化单词的标记变量。

答案 3 :(得分:0)

你调试了那段代码吗?当你为它调用setBot方法时,似乎_dsbTrench为null。传递“this”指针即可,只要你知道你在做什么:)