Heap Error / Assertion failure
-
#include <iostream> using namespace std; class Array { private: string *s; int i; public: Array(int i) : i(i) { s = new string[i]; } string& operator[](int i) { if( i>= 0 && i < this->i) { return s[i]; } throw("Out of Bounds"); } ~Array() { delete s; } void bigger(int i) { delete s; s = new string[i]; this->i = i; } }; int main() { Array arr(10); arr.bigger(20); getchar(); }Hey kriege einen Heap Error weiß aber nicht wieso die Funktion bigger kann ruhig das Array mit Inhalt zerstören das ist nicht schlimm mir geht es darum wieso ich einen Heap Error bekomme. Der Fehler entsteht bei der Methode bigger undzwar bei delete s
-
new[]
verlangt
delete[]
-
Shade Of Mine schrieb:
new[]
verlangt
delete[]new[] verlangt vector.

Das sieht man schon da dran, dass hier neben dem fehlenden delete noch eine ganze Reihe anderer Sachen falsch gemacht wurden.
-
Ah danke Shade. Hmm was ist noch falsch ? Also es fehlt ein Kopierkonstruktor und die Operatorüberladung für das Gleichheitszeichen um flache Kopien zu vermeiden. Was ist noch falsch ???
-
realEngine2000 schrieb:
Ah danke Shade. Hmm was ist noch falsch ? Also es fehlt ein Kopierkonstruktor und die Operatorüberladung für das Gleichheitszeichen um flache Kopien zu vermeiden. Was ist noch falsch ???
Ist das nicht schlimm genug, wenn die fehlen? Ich habe durchaus auch bedenken, dass du die korrekt implementierst, angesichts anderer Fehler: Was passiert beispielsweise, wenn in Zeilen 11 oder 27 eine Exception fliegt und dadurch (oder später) der Destruktor aufgerufen wird? Abgesehen davon gibt es auch noch lauter Kleinigkeiten, wie fehlende Header, unbenutzte Header, komische Datentypen (int für eine Größenangabe?) und fehlende const-correctness.
So wirklich gefallen mag mir die Implementierung sowieso nicht. Alles, was sie kann, kann vector auch, und das zudem noch besser. Wieso also nicht direkt vector benutzen oder wenigstens vector so gut wie möglich nachprogrammieren?