Mein Programm stürtzt ab wenn ich versuche ein dynamisches Array zu löschen. Das Array ist von einer selbstdefinierten struct, die folgendermassen aussieht:
Das Array ist wiederum member einer Klasse:
Es wird in dieser Klasse initialisiert mit
Das funktioniert auch alles prächtig, ich kann damit so ziemlich alles machen. Das Problem kommt wenn ich das Array wieder löschen will, mit folgender Zeile:
wobei mCubes[i] ein Pointer zu einem Objekt ist das das Objekt mCube vom Typ ES_Cluster enthält, und bei dem das Array Stars[] neu initialisiert werden soll. Dazu würde ich es gerne erst löschen, aber Windows triggert dann einen breakpoint in xstring, offensichtlich beim Versuch die Strings zu löschen die in jedem ES_Star objekt vorhanden sind:
Was sollte ich also tun um das Array korrekt zu löschen?
Code:
struct ES_Star
{
std::string Name;
float Magnitude;
std::string Spectrum;
int Fraction;
std::string Sequence;
double x;
double y;
double z;
long CubeX;
long CubeY;
long CubeZ;
bool LabelDir;
core::vector3df Position;
scene::ISceneNode *node;
scene::ISceneNode *stalk;
scene::ISceneNode *label;
};
Das Array ist wiederum member einer Klasse:
Code:
class ES_Cluster
{
public:
ES_Cluster(void);
~ES_Cluster(void);
void ClearCluster(void);
void ConvertHyg(void);
void LoadCat(std::string CatName);
void InitCluster(void);
void CreateCube(ES_Cluster &Cube, long X, long Y, long Z);
void AddStarsToScene(scene::ISceneManager *smgr, int CubeOffsetX, int CubeOffsetY, int CubeOffsetZ);
void AddStalksToScene(scene::ISceneManager *smgr);
void AddLabelsToScene(scene::ISceneManager *smgr, gui::IGUIEnvironment *mGUI);
void RemoveStarsFromScene(void);
void RemoveStalksFromScene(void);
void RemoveLabelsFromScene(void);
bool GetStalks(void);
bool GetLabels(void);
bool GetStars(void);
void ToggleStars(scene::ISceneManager *smgr, int CubeOffsetX, int CubeOffsetY, int CubeOffsetZ);
void ToggleStalks(scene::ISceneManager *smgr);
void ToggleLabels(scene::ISceneManager *smgr, gui::IGUIEnvironment *mGUI);
void SwitchCubes(scene::ISceneManager *smgr, gui::IGUIEnvironment *mGUI,
CubePtr &mCubes, core::vector3df &CurCube, int mDir);
ES_Star IdentifyNode(CubePtr mCubes, long NodeID);
long nStars;
ES_Star *Stars; //<------------------
private:
bool mLabels;
bool mStalks;
bool mStars;
void CreateSwitchCubes(CubePtr mCubes[], core::vector3df CurCube, int mDir);
};
Es wird in dieser Klasse initialisiert mit
Code:
Stars = new ES_Star[x]
Das funktioniert auch alles prächtig, ich kann damit so ziemlich alles machen. Das Problem kommt wenn ich das Array wieder löschen will, mit folgender Zeile:
Code:
delete mCubes[i]->mCube->Stars;
wobei mCubes[i] ein Pointer zu einem Objekt ist das das Objekt mCube vom Typ ES_Cluster enthält, und bei dem das Array Stars[] neu initialisiert werden soll. Dazu würde ich es gerne erst löschen, aber Windows triggert dann einen breakpoint in xstring, offensichtlich beim Versuch die Strings zu löschen die in jedem ES_Star objekt vorhanden sind:
Code:
__CLR_OR_THIS_CALL ~basic_string()
{ // destroy the string
_Tidy(true);
}
Was sollte ich also tun um das Array korrekt zu löschen?