Fehler bei Arbeitsspeicherreservierung



  • Hallo.

    Ich schreib gerade so einen MD2-Loader.
    In meiner Klasse CPlayer, abgeleitet von CMD2Model, habe ich einen Vektor, der Zeiger auf CMD2Models speichert.
    Dieser Vektor soll die Waffen darstellen.

    Meine Funktion CPlayer::AddWeapon schaut so aus:

    void CPlayer::AddWeapon(const char* filename,const char* Texname)
    {
        CMD2Model *M=new CMD2Model();
        MessageBox(NULL,"Jetzt kommt M->Load...","",0);
        if(M->LoadModel(filename))
        {MessageBox(NULL,"in AddWeapon : Model erfolgreich geladen","",0);};
        //if(!M->LoadTexture(Texname))
        //{MessageBox(NULL,"Fehler in AddWeapon : Kann Textur nicht laden","",0);};
        //Weapons.push_back(Weapon);
    };
    

    Also ruft AddWeapon immer die Funktion LoadModel von CMD2Model auf.
    In dieser Fuktion gibt es dann an einer Stelle wo Speicher reserviert wird immer einen Absturz:

    triangles = new md2_triangles[header.num_tris];
    

    Das Problem habe ich nicht wenn das Player-Modell geladen wird, also bei CPlayer::LoadModel,
    und ich hatte es auch nicht als ich die Waffen nicht als vector<CMD2Model*> sondern als CMD2Model* darstellte.
    Deswegen vermute ich dass es damit zusammenhängt dass ich die Waffen als Vektor speichere.

    Also, wisst ihr warum ein Fehler bei der Speicherreservierung auftritt?
    Danke!



  • Das kannst du doch alleine heraus finden. Fange doch einfach mal ne Exception ab. new wirft für gewöhnlich std::bad_alloc wenn zu wenig Speicher frei ist. Und ich schätze, header.num_tris ist auch zu groß. Denn wie groß ist denn ein md2_triangles-Objekt?


Anmelden zum Antworten