std :: map初始化在iPhone设备上崩溃,但不在模拟器中崩溃

时间:2009-11-05 02:03:52

标签: iphone xcode stl

我尝试打开Call C++ Default Ctors/Dtors in Objective-C标记,但是当我第一次尝试访问我的地图时,我仍然收到EXC_BAD_ACCESS错误:

(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].vertexCount=0;
(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].indexCount=0;

getMap只返回对我的地图的引用:

-(VertexMap *) getMap{
    return &texMap;
}

VertexMap是std :: map的typedef:

typedef std::map<GLuint, VertexInfo> VertexMap;

不知道为什么这会在设备上失败,而不是在模拟器中,有什么想法?

1 个答案:

答案 0 :(得分:1)

我们很清楚:

(*[TextureBatcher getSharedTextureBatcher].getMap)[texID].vertexCount=0;

如果Map [texID]不存在,则上面的行将导致构造VertexInfo对象(使用默认构造函数VertexInfo())。这是你想要的吗?

也许底层的std :: map在设备上的实现方式不同,阻止了这种初始化?

您确定在设备目标上设置在Objective-C中调用C ++默认Ctors / Dtors 标志,而不仅仅是模拟器目标吗?

通常,模式是在这里使用指针(C ++),所以你最终得到:

typedef std::map<GLunit, VertexInfo*> VertexMap;
VertexMap theMap;

theMap[0] = new VertexInfo(...);

//  now operate on theMap[0] normally

或者我误解了这个问题?