使用int变量进行c ++异常访问冲突

时间:2013-02-02 22:10:16

标签: c++ exception access-violation

我有一个非常疏远的错误。我得到了一个名为currentState

的int类型的object属性

这是宣言

class WorkerAgent : public BaseAgent {

private:
    int currentState;

下面的代码在游戏循环中运行了很多次但是有时候(随机时间)代码会破坏该行的程序(270)

* OBS:在运行这行代码时已经初始化了currentState(270)!

if (currentState == REPAIRING) {

    if (!unit->isRepairing()) {

        setState(GATHER_MINERALS);
        BaseAgent* base = AgentManager::getInstance()->getClosestBase(unit->getTilePosition());

        if (base != NULL) {

            unit->rightClick(base->getUnit());
            return;
        }
    } else {

        return;
    }
}

int cur = currentState; // (line 270) 
bool b = cur == FIND_BUILDSPOT; 

我有一个EXCEPTION_ACCESS_VIOLATION并且程序发生冲突..我不知道可能发生,因为currentState不是指针cur

错误

VERSION: 1.16.1.1
BWAPI:
  REVISION: 4160
  BUILD: RELEASE
  ERROR: None
  LOCATION: Single Player 
MAP: Stepping Stones
     (3)Stepping Stones.scm

EXCEPTION: 0xC0000005    EXCEPTION_ACCESS_VIOLATION
FAULT:     0x10044217    BWAPI.dll
REGISTERS:
  EDI: 00000140
  ESI: 00000003
  EBX: 00000000
  EDX: C208C483
  ECX: 5B46A60C
  EAX: 035F0001
  EBP: 0018EEE8
  EIP: 10044217
  ESP: 0018E4C4
STACK:
  BWAPI.dll         0x10044217      ----
  BWAPI.dll         0x10046C38      ----
  BWAPI.dll         0x10047A43      ----
  BWAPI.dll         0x100408C6      ----
  DUMB.DLL          0x5B4254A0    WorkerAgent::computeActions
    d:\programming\mestrado\bots\dumb\bthaimodule\source\workeragent.cpp:270

有关此案的任何其他信息,请问我!我对这个问题感到很疯狂!

1 个答案:

答案 0 :(得分:1)

currentState是您班级WorkerAgent的成员,这意味着您必须拥有WorkerAgent类型的有效对象才能存在。

您可能在未向我们展示的代码中使用了无效(null,未初始化,已删除或其他垃圾)指向currentState的指针。