c++程序运行时错误问提
我想做个简单的四则运算计算器。例如:输入“3+2*5”然后打印出结果。下面这个是我自己做的,用VC2005调试说有这样的错误 : 0x004038e6 处未处理的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突。
请问问题的原因是什么?怎样改正呢?
下面是程序清单:
#include <iostream>
#include <string>
using namespace std;
template<class T>
class Stack
{
private:
T* button;
T* top;
public:
Stack(){
button=new T[100];
top=button=0;
}
~Stack(){delete [] button;}
void Push(T elem);
T Pop();
T* Getbutton();
T* Gettop();
};
template<class T>
void Stack<T>::Push(T elem)
{
*top++=elem; //提示的是这里出错
}
template<class T>
T Stack<T>::Pop()
{
top--;
return *top;
}
template<class T>
T* Stack<T>::Getbutton()
{
return button;
}
template<class T>
T* Stack<T>::Gettop()
{
return top;
}
int main()
{
int i=0;
string a;
Stack<float> s;
Stack<char> f;
cout<<"请输入您要计算的表达式:"<<endl;
cin>>a;
while(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/')
i++;
float *pt=0;
for(pt=s.Gettop();i!=a.size();i++)
{
if(a[i]=='*'){
*(pt-1)=*(pt-1)*(float(a[i+1])-48);
i++;}
else if(a[i]=='/'){
*(pt-1)=*(pt-1)/(float(a[i+1])-48);
i++;}
else if(a[i]=='+'||a[i]=='-')
f.Push(a[i]);
else{
s.Push(float(a[i])-48);
pt++;
}
}
char* pfb;
float* psb;
for(pfb=f.Getbutton(),psb=s.Getbutton();pfb!=f.Gettop();psb++,pfb++)
{
if(*pfb=='+'){
*(psb+1)=*psb+*(psb+1);
}
else{
*(psb+1)=*psb-*(psb+1);
}
}
cout<<"结果是:"<<s.Pop()<<endl;
return 0;
}