2

コードの一部:

-インスタンスをオブジェクト マネージャーに挿入する

Object* o;
for(int i=0; i<10; i++) 
{
    o = new Tile(32*i, 0);
    o->ID = i+2;
    o_manager.Create(i+2,o);
}
o = new Player(50.,50.);
o->ID = 1;
o_manager.Create(1,o);

-マネージャーからクアッドツリーへのインスタンスの挿入

CollisionDetector = new QuadTree(0, bounds);
for(std::map<unsigned int, Object*>::iterator it = Instances.begin(); it !=  Instances.end(); it++)
{
  std::cout << it->second->COL << std::endl;
  if(it->second->COL) //probable place of error
  {
     std::cout << "Object (" << it->first << ")... ";
     CollisionDetector->insert(it->second);
  }
  std::cout << "inserted into QuadTree" << std::endl;
}

原因がまったくわからない問題があります。11 個のインスタンスを (マップ コンテナーに) 配置するオブジェクト マネージャー クラスがあります。次に、すべてのステップで、衝突フラグが設定されたインスタンスを四分木リストに渡します。

実行後、「アクセス違反の読み取り場所 0x0000000c」というエラーが表示されます。

stdout から得た情報から、11 番目のインスタンスを quadtree に挿入しているときにエラーが表示されます (stdout はフラグ値を出力しますが、「オブジェクト (ID)...」は出力しません)。インスタンスの数を 10 以下に減らすと、すべて正常に動作します

どこに解決策があるのか​​わからないので、アドバイスをいただければ幸いです。私の英語で申し訳ありませんが、私はネイティブ スピーカーではありません。

4

2 に答える 2

1

「(マップ コンテナーに) 11 個のインスタンスを配置するオブジェクト マネージャー クラスがあります。」

しかし、それはたった 10 個のインスタンスです。

for(int i=0; i<10; i++) 

これで問題が解決しない場合は、さらにコードを投稿する必要があります。

于 2013-03-28T12:41:51.267 に答える
1

あなたが抱えている問題は、確かにnullのポインタです。は0x0000000c、オブジェクトの開始アドレスに相対的なメンバーのアドレスです。(おそらくCOL、 のヘッダーを教えていただければObject)

マップに追加する要素が null でないことを確認してください。

于 2013-03-28T12:41:52.573 に答える