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
MyVector.cpp
Mit freundlichen Grüßen
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;
};
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: