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 个实例插入四叉树时出现错误(stdout 打印标志值,但不打印“对象(ID)...”)。当我将实例数量减少到 10 个或更少时,一切正常

我会很感激任何建议,因为我不知道在哪里可以找到解决方案。对不起我的英语,我不是母语人士。

4

2 回答 2

1

“我有一个对象管理器类,我在其中放置了 11 个实例(到地图容器中)。”

但这只是 10 个实例:

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

如果这不能解决您的问题,您应该发布更多代码。

于 2013-03-28T12:41:51.267 回答
1

您遇到的问题肯定是一个为空的指针。这0x0000000c是相对于对象起始地址的成员地址。(可能COL,如果你给我们标题Object

确保您添加到地图的元素不为空。

于 2013-03-28T12:41:52.573 回答