栈的问题,实在不知道是什么原因,希望高手解答

a2503889624 2009-02-02 08:56:47
#include <iostream>
using namespace std;

const int EmptyTOS = -1;

template <class T>
class stack
{
private:
T* Data;
int Capacity;
int TopOfStack;
public:
stack(int Size = 100)
{
Data = new T(Size);
Capacity = Size;
TopOfStack = EmptyTOS;
}
// ~stack(){delete[] Data;}
int IsEmpty();
int IsFull();
void MakeEmpty();
void Push(T x);
void Pop();
T Top();
T TopAndPop();
};

template <class T>
int stack<T>::IsEmpty()
{
return TopOfStack == EmptyTOS;
}

template <class T>
int stack<T>::IsFull()
{
return TopOfStack == Capacity-1;
}

template <class T>
void stack<T>::MakeEmpty()
{
TopOfStack = EmptyTOS;
}

template <class T>
void stack<T>::Push(T x)
{
if(!IsFull())
Data[++TopOfStack] = x;
else
{
printf("Out of space!");
exit(1);
}
}

template <class T>
void stack<T>::Pop()
{
if(!IsEmpty())
TopOfStack--;
else
printf("empty stack.");
}

template <class T>
T stack<T>::Top()
{
if(IsEmpty())
return NULL;
return Data[TopOfStack];
}

template <class T>
T stack<T>::TopAndPop()
{
if(IsEmpty())
return NULL;
return Data[TopOfStack--];
}
int Converter(char temp[]);
int main(void)
{
int i;
char temp[20];
i=Converter(temp);
for(int a=0; a<i; a++)
printf("%c",temp[a]);



return 0;
}
int Converter(char temp[])
{
char a;
stack<char> t(50);
int i;
i = 0;
printf("please input number:");
while( (a = getchar()) != '\n' )
{
if(isdigit(a))
{
temp[i++] = a;
}
if(a == '+' || a == '-' || a == '*' || a == '/' || a == '(' || a == ')')
{
if(t.IsEmpty())
{
t.Push(a);
}
else
{
while(1)
{
if(a == '(')
{
t.Push(a);
break;
}
if( (a == '+')||(a == '-') )
{
if(t.IsEmpty() || (t.Top() == '(') )
{
t.Push(a);
break;
}
temp[i++] = t.TopAndPop();
}

if( (a == '*')||(a == '/') )
{
if(t.Top() == '*' || t.Top() == '/')
{
temp[i++] = t.TopAndPop();
}
else
{
t.Push(a);
break;
}
}

while(a == ')')
{
if(t.Top() == '(')
{
break;
}
temp[i++] = t.TopAndPop();
}
if(a == ')' && t.Top() == '(')
{
t.Pop();
break;
}
}
}
}
}

while(!t.IsEmpty())
{
temp[i++] = t.TopAndPop();
}
return i;
}

为什么一加上~stack(){delete[] Data;}
程序就崩溃,这不是正常的析构时删除空间吗?
不加这个就没问题,到底是什么原因啊,希望大家能帮帮忙 谢谢了!
我是菜鸟 现在没分 希望大家帮帮忙啊!!
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
a2503889624 2009-02-05
  • 打赏
  • 举报
回复
谢谢楼上的两位。十分感谢!
kostion 2009-02-02
  • 打赏
  • 举报
回复
代码太长了,不用贴这么多,完全同意楼上的,Data = new T(Size);这么写编译器会被编译为,如 char *s = new char(65); //调用了char的构造函数,非配了一个char的空间,并且值为‘A’,。
而char *s = new char[65];这才是你的目的吧
Vitin 2009-02-02
  • 打赏
  • 举报
回复
Data = new T(Size);
改成
Data = new T[Size];
JL3517 2009-02-02
  • 打赏
  • 举报
回复
我要旁观到什么时候呢?

65,211

社区成员

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

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