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;
}
请问问题的原因是什么?怎样改正呢?
下面是程序清单:
#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;
}
...全文
相关推荐
C++ 获取程序运行目录
C++语言编程中关于字符串编程。获取程序运行目录i,源码
c++程序运行出错问题处理
可以解决c++某些程序运行出错的问题 可以解决c++某些程序运行出错的问题 可以解决c++某些程序运行出错的问题 可以解决c++某些程序运行出错的问题
C++ .h和.cpp文件总结
总结了.h文件能做什么,.cpp文件能做什么,总结了.h文件的本质,方便新手在遇到文件包含、类型声明、变量定义时能理清.h与.cpp关系,纯属个人总结文档。
C++基于LOG4CPP的使用封装库
代码是C++,基于LOG4CPP进行封装日志,适用于Linux环境,使用过程时,对其进行继承即可套用其结构
C++实现的Fins库文件源代码 FinsLib_CPP.zip
C++实现的Fins库文件源代码,可以集成到自己的应用中与欧姆龙PLC通信


