fehler mit vektor (stl)



  • hab eigentlich schon ein paar Sachen mit vektor gemacht. Nur was ich jetzt gemacht habe geht irgendwie nicht, da gibts bei der letzten Anweisung nen Laufzeitfehler:

    typedef struct VERTEX 
    {
        float x, y, z;
    } Vertex;
    
    vector<Vertex*>Map;
    
    //blabla
    
    Map.push_back(new Vertex);
    

    wahrscheinlich ist der thread hier voll unnötig, weil ich was total primitives übersehen habe 😮 Trotzdem komm ich greade nciht drauf Vieleicht könnt ihr mir auf die Sprünge helfen 😃
    Danke schön 🙂



  • hab ich jetzt so nen großen Mist geschrieben... oder wieso antwortet mir keiner? 😞



  • der code is richtig



  • toll... 😕 und trotzdem gibts nen Laufzeitfehler wegen irgendner Zugriffsverletzung
    .
    ..
    ...
    Was fürn mist, naja, dann muss ich es wohl irgendwie anders machen 🙄



  • struct Vertex
    {
        Vertex(const float X, const float Y, const float Z)
            :x(X), y(Y), z(Z) {}
        float x, y, z;
    };
    

    Aber gibts einen bestimmten Grund einen Vektor aus Zeigern zu verwenden?

    [ Dieser Beitrag wurde am 20.04.2003 um 23:39 Uhr von nman editiert. ]



  • dann gib uns doch was vollständiges was abstürzt. dieses hier geht:

    #include <vector>
    
    typedef struct VERTEX 
    {
        float x, y, z;
    } Vertex;
    
    int main() {
        std::vector<Vertex*> Map;
        Map.push_back(new Vertex);
    }
    

    bei dir auch??



  • Post doch mal mehr Code.

    Eventuell liegt der Fehler bei //blabla



  • hm, eigentlich sollte das ja gehen. wann bekommste denn den laufzeitfehler? beim beenden des programms? das liegt dann jedenfalls daran, dass du deinen speicher nicht aufräumst! vektoren die pointer enthalten sind ganz böse, da du nämlich den speicher auf den die pointer zeigen selber freigeben musst. wenn dein programm also nach dem .push_back(new Vertex); aufhört, hast du ein speicherloch erzeugt, da nur der pointer selber gelöscht wurde, aber nicht der speicher, den der angelegte vertex belegt hat!



  • int * i = new int[1];
    return 0;

    führt zum resourceleak aber nicht zum Laufzeitfehler.

    Dennoch ist zu beachten das Du die Zeiger selsbt löschen musst.

    void MyDelete(int * toDelete)
    {
    delete toDelete;
    }

    vector<Vertex *> Map;
    [...]

    for_each(Map.begin();Map.end();MyDelete);

    Hast Du den Fehler des Laufzeitproblemes gefunden ?



  • @Knuddlbaer: Das ist toll, wie du ihm das erklärst.

    Wieso es zum Absturz kommt kann man im gezeigten Code nicht erkennen. Wie bereits mehrfach gesagt liegt der Fehler w*****einlich wo anders.

    Und wie du siehst hoffen alle, dass irgendwann auch ein delete all die Einträge im vektor wieder freigibt.


Anmelden zum Antworten