vectoren
-
Hi!
Ich habe ein 3 dimensionales Array.
std::vector<std::vector<std::vector<CObject*> > > m_Spielfeld;
Dieses Array wird mit der Methode
void CEngine::CreateGame(const unsigned int& Width, const unsigned int& Height) { m_Spielfeld.resize(Width); for(unsigned int i = 0; i < m_Spielfeld.size()-1; ++i); m_Spielfeld[i].resize(Height); }
Auf die gewünschte Größe erweitert. (Jedenfalls sollte es so sein)
Will ich nun ein CObject zu dem Array hinzufügen, bekomm ich aus mir unbekannten Gründen eine Fehlermeldung.
void CEngine::AddObject(const std::string& szPicName, const int& x, const int& y, const unsigned int& Layer) { m_Spielfeld[x][y].push_back(new CObject(m_Bitmaps[szPicName])) }
HEAP[RPG.exe]: Invalid allocation size - A8A8A8D0 (exceeded 7ffdefff)
Nicht abgefangene Ausnahme in RPG.exe: 0xC0000005: Access Violation.Wenn ich das Array von Anfang an (im C'tor der Klasse CEngine) auf eine entsprechende Größe setzte, läuft alles problemlos.
Was machr ich falsch?mfg
-
Schau mal in die FAQ. Da werden mehrdimensionale Arrays ausführlich behandelt.
-
In diesem konkreten Fall würde ich aber zuerst mal entweder <= schreiben oder -1 weglassen.
-
Hi!
Gab ne Fehlermeldung, wenn ich das -1 weg gelassen habe.
Mit der Function aus der FAQ
template<typename T> void resize3DimVector(vector< vector< vector<T> > > & vec, size_t FirstDim, size_t SecDim, size_t ThirdDim) { vec.resize( FirstDim ); for (size_t i = 0; i < FirstDim; ++i) { vec[i].resize( SecDim ); for (size_t j = 0; j < SecDim; ++j) vec[i][j].resize( ThirdDim ); } }
functionierts jetzt, auch wenn ich keinen großen Unterschied sehe.
mfg
-
Schon aufgefallen, dass resize3DimVector() zwei Schleifen, CreateGame() aber
nur eine beinhaltet. Denk mal drüber nach...
-
Das war nicht der Fehler. Die Schleife für die dritte Dimension hab ich aus der resize3DimVector Function entfernt und es läuft trotzdem noch.
template<typename T> void resize3DimVector(std::vector< std::vector< std::vector<T> > > & vec, size_t FirstDim, size_t SecDim, size_t ThirdDim) { vec.resize( FirstDim ); for (size_t i = 0; i < FirstDim; ++i) { vec[i].resize( SecDim ); //for (size_t j = 0; j < SecDim; ++j) // vec[i][j].resize( ThirdDim ); } }