代码片段:
- 将实例插入对象管理器
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或者一切正常时。
我会对任何建议表示感谢,因为我不知道在哪里可以找到解决方案。 对不起我的英语,我不是母语。
答案 0 :(得分:1)
“我有一个对象管理器类,我将11个实例放入地图容器中。”
但那只是10个实例:
for(int i=0; i<10; i++)
如果这不能解决您的问题,您应该发布更多代码。
答案 1 :(得分:1)
您遇到的问题是确保指针为null。 0x0000000c
是相对于对象起始地址的成员的地址。 (可能是COL
,如果你给我们Object
的标题)
确保添加到地图的元素不为空。