C++ 在“std::map”中存储对象时代码崩溃` typedef std::map MyMap; MyMap*MyMap=新建MyMap; // ... myMap->insert(myMap::value_type(0,objectOfType_MyObject));

C++ 在“std::map”中存储对象时代码崩溃` typedef std::map MyMap; MyMap*MyMap=新建MyMap; // ... myMap->insert(myMap::value_type(0,objectOfType_MyObject));,c++,stl,map,C++,Stl,Map,为什么我的代码会崩溃,堆栈跟踪会下降到 typedef std::map<int, MyObject*> MyMap; MyMap* myMap = new MyMap; // ... myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) ); std::less::operator() ? 我知道,如果我使用自定义键类,我必须提供一个比较器,但这是一个int 我以前从未使用过地图,这可能是一个愚蠢

为什么我的代码会崩溃,堆栈跟踪会下降到

 typedef std::map<int, MyObject*> MyMap;
 MyMap* myMap = new MyMap;
 // ...
 myMap->insert( MyMap::value_type( 0, objectOfType_MyObject ) );
std::less::operator()
?

我知道,如果我使用自定义键类,我必须提供一个比较器,但这是一个int

我以前从未使用过地图,这可能是一个愚蠢的问题,但我已经被困在这个问题上很久了

谢谢

这段代码为我工作(编译和运行):

你们真的需要存储指向对象的指针吗

#include <map>

class MyObject
{ };

int main(void)
{
    typedef std::map<int, MyObject*> MyMap;

    MyMap myMap;
    MyObject *obj = new MyObject;

    myMap.insert(MyMap::value_type(0, obj));

    delete obj;
}
#包括
类MyObject
{ };
内部主(空)
{
typedef std::map MyMap;
我的地图;
insert(myMap::value_type(0,MyObject());
}

更小,而且几乎不可能获得内存泄漏。如果您确实需要存储指针,对于多态行为,请检查,它有一个。

所有堆栈跟踪是什么样子的?提供完整的堆栈跟踪或使用valgrind检测一些内存滥用:-)可能是一个愚蠢的注释。但是您确定在插入之前没有删除myMap对象吗?回答很好;在最后一个例子中,他可能还需要为MyObject定义一个副本构造函数。我的问题是我没有在初始化类时对映射进行.clear()初始化。(即使大小为0)。我正在存储Obj-C对象
#include <map>

class MyObject
{ };

int main(void)
{
    typedef std::map<int, MyObject*> MyMap;

    MyMap *myMap = new MyMap;
    MyObject *obj = new MyObject;

    myMap->insert(MyMap::value_type(0, obj));

    delete obj;
    delete myMap;
}
#include <map>

class MyObject
{ };

int main(void)
{
    typedef std::map<int, MyObject*> MyMap;

    MyMap myMap;
    MyObject *obj = new MyObject;

    myMap.insert(MyMap::value_type(0, obj));

    delete obj;
}
#include <map>

class MyObject
{ };

int main(void)
{
    typedef std::map<int, MyObject> MyMap;

    MyMap myMap;

    myMap.insert(MyMap::value_type(0, MyObject()));
}