指针作为模板类的私有成员,释放时内存报错

DiffusionTensorImage 2012-03-02 03:08:07
编写了一个模板类的堆栈作为联系,源代码如下:
#include <iostream>
#include <cstring>
using namespace std;


template <typename T>
class Stack
{
public:
void pop();
void push(T data);
private:
T *top;
T *bottom;
public:
Stack();
~Stack();
};

template <typename T>
Stack<T>::Stack()
{
bottom=new T;
top=bottom;
*bottom=-1;
cout<<endl<<"Construct New Stack"<<endl;
}
template <typename T>
Stack<T>::~Stack()
{
if (top!=bottom)
top=bottom;
delete bottom;
cout<<endl<<"Release this Stack"<<endl;
}
template <typename T>
void Stack<T>::push(T data)
{
*(++top)=data;
}
template <typename T>
void Stack<T>::pop()
{
if (top==bottom)
cout<<endl<<"The Bottom Data In This Stack Is :"<<*top<<endl;
else
cout<<endl<<"The Current Data In Stack Top Is "<<*(top--)<<endl;
}

void main()
{
Stack<int> stack1;
stack1.push(1);
stack1.push(2);
stack1.push(3);
stack1.pop();
stack1.pop();
stack1.pop();
}


问题出在 在调用析构函数时,在delete bottom时出现错误,如果我在delete bottom之前再加一句bottom=NULL,就不会出错,但这样一来原先bottom指向的那片内存实际上应该并没有被释放,请问问题出在哪里?为什么?该如何解决?感谢
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoloverme1 2012-03-02
  • 打赏
  • 举报
回复
template <typename T>
void Stack<T>::push(T data)
{
*(++top)=data;
}
这个函数又问题,没有分配内存!
  • 打赏
  • 举报
回复
哦。。。。。栈的大小没有设置。。。
www_adintr_com 2012-03-02
  • 打赏
  • 举报
回复
你只 new 了一个 int 的大小出来, 却放了那么多数据进去, 肯定不行撒.
把你的 new 和 delete 改多点吧:



bottom=new T[100]
...
delete []bottom;

;

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧