Exception beim insert(...) einer std::map



  • Hi,

    ich bekomme sonderbarer Weise eine Exception, wenn ich versuche, ein neues Paar in eine map einzufügen. Ich wüsste gerne, ob es sich um einen Fehler beim Umgang mit der map handelt, oder ob ich einen anderen Fehler mache.

    folgende Voraussetzungen:
    Im Header:
    ...
    private:
    typedef std::mapstd::string,Layer LayerMap; //Layer ist natürlich eine Klasse!
    LayerMap _layerMap;
    ...

    Im cpp:
    ...
    Layer layer(gElem, view);
    _layerMap.insert(LayerMap::value_type(layerStr, layer));
    ...

    Die Benutzung ist doch korrekt, oder???



  • die methode insert() wirft keine exception, string wirft auch nie exceptions, ausser bad_alloc im falle eines Out Of Memory - die frage ist also: wirft Layer exceptions?

    BTW: welche Exception wird denn geworfen??



  • BTW: welche Exception wird denn geworfen??

    BTW: wie findet man das raus?



  • @shade

    ok, dankeschön. Das hilft mir etwas weiter. Ich übergebe dem layer einen Pointer auf view (s.o.). Im Debugger wird auch eine sinnvolle Speicheradresse angezeigt.

    Nachdem ich allerdings den value_type erzeuge (habe ich mal in eine extra Zeile geschrieben) zeigt der Pointer auf das view im value_type.second auf 0xcccccccc. Das ist alles andere als sinnvoll. Die Frage ist nun, wieso die Adresse verloren geht, beim Erzeugen des value_types. Wir das layer-Objekt kopiert und nicht alles mitgenommen?



  • Wir das layer-Objekt kopiert

    Ja.

    und nicht alles mitgenommen?

    Wie sieht der Copy-Ctor aus?

    BTW: wie findet man das raus?

    catch(const std::exception& ex)
    {
    std::cout << typeid(ex).name() << std::endl;
    }
    

    Geht natürlich nur für von std::exception abgeleitete Exceptions.



  • @HumeSikkins

    hähä, der sah ziemlich schlecht aus. Ich habe einfach mal das View mit kopiert 🙄

    Die Exception ist allerdings immer noch da.



  • catch(const std::exception& ex)
    {
    std::cout << typeid(ex).name() << std::endl;
    }
    Geht natürlich nur für von std::exception abgeleitete Exceptions.

    Danke. Genau sowas hab ich grade gesucht. Irgendwie hab ich das RTTI-System von C++ noch nie so wirklich verwendet.


Anmelden zum Antworten