Struktur kopieren - Werte verändern sich!



  • Hey!

    Ich habe eine Klasse mit einem std::vector<EigeneStruktur> eigeneStruktur;. Wenn ich nun ein temporäres Objekt von EigeneStruktur erstelle, und per push_back eigeneStruktur[0] erstelle, stimmt alles. Alle Werte sind so, wie ich sie initialisiert habe.

    Sobald ich jedoch aus der Funktion draußen bin, sollte sich der Vektor doch nicht verändert haben, die Klasse lebt jedenfalls ständig weiter. Teils stimmen die Werte noch, teils sind sie irgendwie.

    Wie kann das sein?

    struct Model
    {
    	struct Vertex
    	{
    		D3DXVECTOR3 position;
    	}; Vertex* vertex;
    
    	int vertices;
    
    	WORD* index;
    
    	LPDIRECT3DVERTEXBUFFER9  d3dVertexBuffer;
    	LPDIRECT3DINDEXBUFFER9   d3dIndexBuffer;
    };
    

    void ResourceManager::loadModel()

    Model model;
    
    // zB
    	model.index[0] = 0;
    	model.index[1] = 1;
    	model.index[2] = 2;
    	model.index[3] = 2;
    	model.index[4] = 1;
    	model.index[5] = 3;
    
    models.push_back(model);
    

    Der ResourceManager hat natürlich std::vector<Model> models;. Wenn ich nun eine Zeile unter ...loadModel() springe und ResourceManager::models[0].index abfrage, hat der plötzlich 65262. Immer.

    Woran liegt das? Und der D3DXVECTOR3 hat dann auch -1.40000000xxx-e^ blablabla aber nach dem push_back noch die normalen...

    Was geht da ab?

    (nur int vertices; bleibt gleich, immer 3, schön so wie ich es initialisiert habe)

    MfG



  • Da fällt mir auf, gerade Vertex* und WORD* werden nicht übernommen, sondern haben nach der Funktion irgendeinen Wert. Ich habe nämlich das gemacht:

    ...loadModel()

    model.vertex = new Model::Vertex[model.vertices];
    model.index = new WORD[indices];
    
    ...
    
    models.push_back(model);
    
    ...
    
    delete model.index;
    delete model.vertex;
    

    Aber ich verwende es doch nur für:

    ...
    
    memcpy(pVertex, model.vertex, sizeof(model.vertex));
    
    ...
    
    memcpy(pIndices, model.index, sizeof(model.index));
    
    ...
    

    MfG



  • Ich war schon verdammt müde...

    Es zeigt dann also ein Zeiger auf einen nicht definierten Speicher. Nun, aber wie kann ich das nun anstellen? Meine Struktur Model benötigt unbedingt ein index-Array, jedoch muss ich dieses dynamisch anlegen, da ich erst bei loadModel weiß, wieviele indices ich brauche.

    MfG



  • du brauchst einen copy constructor um eine tiefe Kopie zu machen.


Anmelden zum Antworten