本帖最后由 Sj中国智造 于 2018-3-27 20:27 编辑 #include <iostream>
#define MAX_SIZE 1024
#define TRUE 1
#define FALSE 0
using namespace std;
template <class T>
class sqStack
{
public:
sqStack();//申请一块内存
~sqStack();//释放申请的内存
int isEmpty();//判断栈是否为空
T push(T element);//压栈
T pop();//弹栈
private:
T * top;//头指针
T *base;//底指针
};
template <class T>
sqStack<T>::sqStack()
{
this->base = this->top = new T[MAX_SIZE];
}
template <class T>
sqStack<T>::~sqStack()
{
cout << "析构函数正在释放头指针的指向的内存" << endl;
delete[] this->top;
cout << "析构函数正在释放底指针的指向的内存" << endl;
delete[] this->base;
}
template<class T>
int sqStack<T>::isEmpty()
{
if (this->top == this->base)
{
return TRUE;
}
else return FALSE;
}
template <class T>
T sqStack<T>::push(T element)
{
this->top++;
*(this->top )= element;
return *(this->top);
}
template <class T>
T sqStack<T>::pop()
{
if (!isEmpty())
{
this->top--;
return *(this->top + 1);
}
return NULL;
}
int main()
{
sqStack<int> stack1;
stack1.push(5);
stack1.push(6);
cout << "弹出的元素是:" << stack1.pop() << endl;
system("pause");
return 0;
}
知道是析构函数中的delete[]函数出错,但不知道错在哪和怎么改,求大神解!
delete[]是释放整个数组,因为delete[] this->top已经释放了整个数组了,所以第二个delete[]语句找不到数组的内存,就崩溃了,还有delete[] 好像只能释放数组的首地址,top和base指针在操作中都发生了改变,不再指向首地址,你可以声明一个指向首地址的指针或者操作的时候声明一个新的指针接收top和base的地址来操作
|