“访问冲突读取位置0x0000000c”错误

时间:2013-03-28 12:36:17

标签: c++

代码片段:

- 将实例插入对象管理器

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);

- 将实例从manager转换为quadtree

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打印标志值,但不打印“Object(ID)...”)。当我将实例数减少到10或者一切正常时

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

2 个答案:

答案 0 :(得分:1)

“我有一个对象管理器类,我将11个实例放入地图容器中。”

但那只是10个实例:

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

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

答案 1 :(得分:1)

您遇到的问题是确保指针为null。 0x0000000c是相对于对象起始地址的成员的地址。 (可能是COL,如果你给我们Object的标题)

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