guten morgen!
ich hab mal wieder ein schönes speicherproblem. es geht um das neualloziieren von einem Array einer Struktur. alles bezieht sich auf eine datei des projekts.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
struct sTele
{
unsigned short iMapID; //Zielkarte
unsigned char iTeleX; //ZielX
unsigned char iTeleY; //ZielY
unsigned char iKey; //Taste für Teleportbedingung
};
class CMapManager
{
private
//...
sTele *m_stTeleport;
public:
//...
};
|
Dieses Array soll einen Teleportpunkt in der Map repräsentieren, pro Tile wird solch eine Struktur erzeugt.
selbst das laden geht wunderbar man beachte bitte die Speicheralloziierung:
|
C-/C++-Quelltext
|
1
2
3
|
//Ohne Probs in der LoadFromFile()-Fkt
m_stTeleport = new sTele[m_iMapSizeX*m_iMapSizeY];
fDatei.read(reinterpret_cast<char*>(m_stTeleport),m_iMapSizeX*m_iMapSizeY*sizeof(sTele));
|
Des weiterebn Gibt es eine Funktion um Ändern der Größe der Karte, void ReSize(int iNewSizeX,int iNewSizeY). und genau hier passiert das bad_alloc. man beachte bitte wieder die speicerhalloziierung und vergleiche mit der aus der LoadFromFile
.
|
C-/C++-Quelltext
|
1
2
|
delete[] m_stTeleport;
m_stTeleport = new sTele[iNewSizeX*iNewSizeY]; //Hier keine Lust mehr
|
iNewSizeX / Y sind gültige Werte, z. b. 40 und 20 wären solch gültige, habs mit dem debugger geprüft.
und genau bei new wirft er eine exeption bad_alloc. woran kann das liegen, wenn es in der loadfromFile GENAU SO gemacht wird? irgendwie werd ich net schlau daraus.