c++程序运行时错误问提

zengshi000 2007-10-29 09:47:38
我想做个简单的四则运算计算器。例如:输入“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;
}
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-10-30
  • 打赏
  • 举报
回复
top=button=0;
==》
top=button;
独孤过儿 2007-10-30
  • 打赏
  • 举报
回复
后面的没看,只看到这里,估计问题就是这里引起的。

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();
};


楼主,构造函数首先申请了一块内存,也就是这一句:

button=new T[100];

这样 button 就指向了那块申请来的内存的首地址,这没问题吧。可是接下来你的这句赋值是干吗呢?

top=button=0;

这样赋值以后,button 就为 0 了啊。那你申请的那块内存还怎么使用呢?
zengshi000 2007-10-30
  • 打赏
  • 举报
回复
然来是这样啊,我知道怎么改了。
真是太感谢了~~~很谢谢你们的回答。让我又知道了不少知识。。

64,683

社区成员

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

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