0

本当に奇妙なエラーがあります。currentState という int 型のオブジェクト属性を取得しました

ここに宣言があります

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

ケースに関するその他の情報については、お問い合わせください。私はこの問題に夢中になっています!

4

1 に答える 1

1

currentStateはあなたのクラスのメンバーです。つまり、存在するにはタイプのWorkerAgent有効なオブジェクトが必要です。WorkerAgentcurrentState

WorkerAgent表示されていない in コードへの無効な (null、初期化されていない、削除された、またはその他のゴミ) ポインターを使用している可能性があります。

于 2013-02-02T22:16:34.190 に答える