C++ Heap Error

KingJoshii1000

Lieutenant
Registriert
Apr. 2010
Beiträge
879
Hallo,
ich versuche mir aktuell eine kleine Vector Klasse nachzubauen. Nun wollte ich eine push_back() Funktion implementieren, welche jedoch nicht ganz so funktionieren möchte, wie ich es gerne hätte. Meine Idee hinter der Funktion war, dass neuer Speicher reserviert wird, in der Größe von den schon vorhandenen Elementen + 1; Dann kopiert eine for-Schleife den Inhalt des alten Speicherblocks in den neuen und fügt am Ende noch das Element hinzu, welches push_back() als Parameter entgegen genommen hat. Soweit funktioniert das sehr gut, jedoch um Memory Leaks zu vermeiden, muss ich den alten Speicherblock löschen und dem Pointer anweisen, auf den neuen zu zeigen? Führe ich jedoch delete[] auf dem alten Speicherblock aus, erhalte ich "HEAP[Uebung.exe]: Heap block at 0065F738 modified at 0065F76C past requested size of 2c
Uebung.exe hat einen Haltepunkt ausgelöst.".

Hier mal der Code:
MyVector.h
Code:
	class MyVector{
	public:
		MyVector(int size);
		~MyVector();
		void set(int point, double value);
		double get(int point);
		int size();
		void push_back(double value);
	private:
		int sz;
		double* elem;
	};
MyVector.cpp
Code:
	MyVector::MyVector(int size)
		:sz(size), elem(new double(size)){

	}
	void MyVector::set(int point, double value){
		elem[point] = value;
	}
	double MyVector::get(int point){
		return elem[point];
	}
	int MyVector::size(){
		return sz;
	}
	void MyVector::push_back(double value){
		double* new_elem = new double(sz +1);
		for (int i = 0; i < sz; ++i){
			new_elem[i] = elem[i];
		}
		++sz;
		new_elem[sz - 1] = value;
		delete[] elem; <----- Hier wird der Heap Error ausgelöst.
		elem = new_elem;
	}
	MyVector::~MyVector(){
		delete[] elem;
	}

Mit freundlichen Grüßen :)
 
Zuletzt bearbeitet:
Hallo,
aber selbstverständlich, wie konnte ich das nur übersehen. Und ich suche schon seit einer Stunde immer zwischen Zeile 16-23.
Habe es verbessert und es funktioniert wunderbar.
Hab vielen Dank :)

Mit freundlichen Grüßen
 
Bedenke auch, daß deine Klasse die sogenannte Rule of Three (http://en.wikipedia.org/wiki/Rule_of_three_(C++_programming)) respektieren sollte. Du solltest ihr also dringend noch einen Kopierkonstruktor und einen Kopier-Zuweisungs-Operator spendieren. In ihrer jetzigen Form würde deine Klasse sich katastrophal verhalten, sollten Instanzen kopiert werden.
 
Zurück
Oben