"Access violation reading location 0x0000000c"错误

"Access violation reading location 0x0000000c" error

本文关键字:0x0000000c 错误 location reading Access violation      更新时间:2023-10-16
代码片段:

-在对象管理器中插入实例

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个实例(映射容器)。然后每一步它都会传递带有碰撞标志的实例到四叉树列表。

执行后,我收到一个错误:"Access violation reading location 0x0000000c"

从我从stdout得到的,错误显示,而插入第11个实例到四叉树(stdout打印标志值,但不打印"对象(ID)…")。当我将实例数量减少到10或更少时,一切都正常

如果你能给我一些建议,我将不胜感激,因为我不知道在哪里找到解决办法。对不起,我的英语不是母语。

"我有一个对象管理器类,我在其中放置了11个实例(映射容器)。"

但这只是10个实例:

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

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

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

确保添加到映射中的元素不为空