Ce code fonctionne (compile & runs) pour moi:
#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;
}
Le problème réside dans les détails (// ...
ou ce que MyObject
peut faire) ou ailleurs. Vous pouvez probablement arranger un peu les choses pour vous aider. Essayez d'empiler allouer des choses quand vous le pouvez. Avez-vous réellement besoin d'un pointeur sur une carte? Je vous suggère de ne pas:
#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;
}
Et avez-vous réellement besoin de stocker des pointeurs sur des objets ou des objets?
#include <map>
class MyObject
{ };
int main(void)
{
typedef std::map<int, MyObject> MyMap;
MyMap myMap;
myMap.insert(MyMap::value_type(0, MyObject()));
}
Beaucoup plus petit, et presque impossible d'obtenir des fuites de mémoire. Si devez besoin de stocker des pointeurs, pour un comportement polymorphique, consultez boost::ptr_container library, qui a un map adapter that stores pointers.
À quoi ressemble toute la pile? – GManNickG
fournir une trace de pile complète ou utiliser valgrind pour détecter une mauvaise utilisation de la mémoire :-) –
Peut-être un commentaire stupide..mais êtes-vous sûr de ne pas supprimer l'objet myMap avant l'insertion? – Naveen