我必须使用C++中的数组编写一个堆栈类模板以供我分配。在析构函数中释放导致内存泄漏
Here是我的代码:
#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];
}
它使用 “g++ -Wall
” 编译正常,但是当我运行该程序,我得到这个错误:
* glibc detected *
./lab3: munmap_chunk(): invalid pointer: 0x00007fff41a3cdf8
尝试了一下使用GDB后,我发现错误发生在该行:
'free[] items' in the destructor.
I不明白为什么释放数组会导致内存泄漏?任何线索?
下一次你可以请有代码在stackoverflow,所以当有人在几个月时间发现主题,他们可以看到代码 – EKS 2009-08-26 09:27:22