Absturz bei delete (DAMAGE: after Normal Block...)
-
Code:
class CProcPath : public CObject{ private: int *m_aiOptions; // Zeiger auf Optionen des Pfades. const int m_iSize; public: CProcPath(int iOptCount) : m_aiOptions(NULL), m_iSize(iOptCount){ //Erzeugen m_aiOptions = new int[iOptCount]; //Initialisieren for(UINT i=0; i< getOptCount(); i++,m_aiOptions[i]=-1); } CProcPath::~CProcPath(){ //Optionsarray löschen delete[] m_aiOptions; //<--- ABSTURZ } int CProcPath::getOptCount() const { return m_iSize; } int &CProcPath::operator[](size_t index){ //Prüfen ob Index ok if(index<0 || index>= getOptCount()) ASSERT(index>=0); return m_aiOptions[index]; } void setDirection(size_t index,int i){ m_aiOptions[index]=i;} void DEBUG_Trace(){ CString str; int k= getOptCount(); for(int i=0; i< getOptCount(); i++){ str.AppendFormat("%i ",m_aiOptions[i]); } str.Append("\n"); TRACE(str); } };Programm stürzt ab im Destuktor bei delete. Hab ich was über sehen?
-
Erstens hast du das ASSERT() falsch eingesetzt

Und zweitens fehlr dir vermutlich ein Copy-Ctor und operator=.
-
hmm aber kann es daran liegen das er im Dstruktor abstürzt?
wenn ich nur:
CProcPath *p = new CProcPath(5);und dann
delete p;mache kackt er schon ab, dafür brauch ich keinen Copy-Ctor... und das ASSERT ist auch egal..
-
mach aus:
for(UINT i=0; i< getOptCount(); i++,m_aiOptions[i]=-1);das:
for(int i=0; i< getOptCount(); i++) m_aiOptions[i]=-1;
-
@vista: sauber... jetzt klappts:)
-
-
weil ich "i" erhöhe bevor ich auf den bereich zugriefe, und so komm ich jedes mal eine einheit über die Array größe !! odeR?
-
Ja. Trotzdem benötigst du jetzt noch einen CopyCTor und einen Op=, siehe dazu auch "Die Regel der großen 3": http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=BigThree#Answ
MfG SideWinder
-
naja Rgel hi noder her.. aber die werde ich nie brauchen...
ich erzeuge ein int array
int *p = new int[x];imd Konsturktor und lösceh diese wieder im destruktor mit
delete[] p;oder gibts keine ausnahme?
Ich kopiere nie ein objekt welche das array enthält oder weise es einem anderen zu....NIE
oder hat es andere grüde?
-
BorisDieKlinge schrieb:
Ich kopiere nie ein objekt welche das array enthält oder weise es einem anderen zu....NIE
oder hat es andere grüde?Sei vorsichtig mit diesen Aussagen - Kopien tauchen mitunter schneller auf als dir lieb ist - und wenn du dann nicht vorgesorgt hast, fliegt dir das Programm um die Ohren.
PS: Und wenn du ganz sicher bist, daß du diese Klasse NIE kopieren willst, solltest du das auch dem Compiler sagen:
class CProcPath : public CObject { ... private: //Kopier-Operationen privat und OHNE IMPLEMENTATION CProcPath(const CProcPath&); CPorcPath& operator=(const CProcPath&); };