Ich muss für meine Aufgabe eine Stapelklassenvorlage mit Arrays in C++ schreiben.
Ici ist mein Code:
#include <iostream>
template <typename Type>
class Stack {
private:
int top;
Type items[];
public:
Stack() { top = -1; };
~Stack() { delete[] items; };
void push(Type);
bool isEmpty() const;
Type pop();
Type peek() const;
};
int main (int argc, char *argv[]) {
Stack<double> st;
return 0;
}
template<typename Type>
void Stack<Type>::push(Type item) {
top++;
if(top == sizeof(items) / sizeof(Type)) {
Type buff[] = new Type[top];
std::copy(items,items+top,buff);
delete[] items;
items = new Type[2*top];
std::copy(buff,buff+top,items);
delete[] buff;
}
items[top] = item;
}
template<typename Type>
bool Stack<Type>::isEmpty() const {
return top == -1 ? true : false;
}
template<typename Type>
Type Stack<Type>::pop() {
//TODO
return items[top--];
}
template<typename Type>
Type Stack<Type>::peek() const{
//TODO
return items[top-1];
}
Die Kompilierung erfolgte problemlos mit " g++ -Wall
"Wenn ich das Programm jedoch ausführe, erhalte ich diesen Fehler:
* glibc erkannt *
./lab3: munmap_chunk(): invalid pointer: 0x00007fff41a3cdf8
Nachdem ich ein wenig mit GDB herumprobiert hatte, fand ich heraus, dass der Fehler durch die Zeile entstand:
'free[] items' in the destructor.
Ich verstehe nicht, warum das Freigeben eines Arrays zu einem Speicherleck führt? Irgendwelche Anhaltspunkte?