C++ 后置评估分割错误
我在使用堆栈进行后缀计算的代码中遇到了分段错误 请帮忙,谢谢 它不能仅根据我的调试进行输入。我觉得我的算法是正确的,方法也是正确的,但我在某个地方遗漏了一些小东西,或者犯了一个我找不到的愚蠢的错误。 我们将不胜感激。非常感谢C++ 后置评估分割错误,c++,stack,C++,Stack,我在使用堆栈进行后缀计算的代码中遇到了分段错误 请帮忙,谢谢 它不能仅根据我的调试进行输入。我觉得我的算法是正确的,方法也是正确的,但我在某个地方遗漏了一些小东西,或者犯了一个我找不到的愚蠢的错误。 我们将不胜感激。非常感谢 #include <iostream> #include <cstring> using namespace std; struct Stack { int data; Stack *next; }*top=NULL,*temp; voi
#include <iostream>
#include <cstring>
using namespace std;
struct Stack {
int data;
Stack *next;
}*top=NULL,*temp;
void push(int item)
{
Stack *new_node = new Stack;
new_node->data=item;
new_node->next=top;
top=new_node;
}
int pop()
{
int item;
if (top==NULL)
cout<<"stack underflow";
else {
temp=top;
item=top->data;
top=top->next;
free(temp);
}
return item;
}
void evaluate(char postfix)
{
int i,val;
int A, B;
ch - '0' is used for getting digit rather than ASCII code of digit */
if (isdigit(postfix))
push(postfix - '0');
else if (postfix == '+' || postfix == '-' || postfix == '*' || postfix == '/')
{
A = pop();
B = pop();
switch (postfix)
{
case '*': val=B*A; break;
case '/': val=B/A; break;
case '+': val=B+A; break;
case '-': val=B-A; break;
}
push(val);
}
}
int main()
{
int i;
string exp;
getline(cin,exp);
for (i=0;i<exp.length();i++)
evaluate(exp[i]);
cout<<"Value of "<<exp<<" is "<<pop();
return 0;
}
#包括
#包括
使用名称空间std;
结构堆栈{
int数据;
堆栈*下一步;
}*top=NULL,*temp;
无效推送(整数项)
{
Stack*new_节点=新堆栈;
新建_节点->数据=项目;
新建节点->下一步=顶部;
top=新的_节点;
}
int-pop()
{
国际项目;
if(top==NULL)
coutnext;
免费(临时);
}
退货项目;
}
void求值(字符后缀)
{
int i,val;
INTA,B;
ch-“0”用于获取数字,而不是数字的ASCII码*/
if(isdigit(后缀))
推送(后缀为“0”);
else if(postfix='+'| | postfix='-'| | postfix='*'| | postfix=='/'))
{
A=pop();
B=pop();
开关(后缀)
{
案例“*”:val=B*A;中断;
案例“/”:val=B/A;中断;
案例“+”:val=B+A;中断;
案例'-':val=B-A;中断;
}
推(val);
}
}
int main()
{
int i;
字符串表达式;
getline(cin,exp);
对于(i=0;i请查看pop
函数中的if语句:
if (top=NULL)
cout<<"stack underflow";
else {
temp=top;
item=top->data;
top=top->next;
free(temp);
}
if(top=NULL)
coutnext;
免费(临时);
}
top=NULL
始终使用NULL
覆盖top
,然后使用else分支(因为NULL为false),其中top->data
将取消引用新分配的空指针
当您使用pop()时,即使是像5
这样简单的输入也会触发此问题
读取最终值。当您在调试器下运行代码时,它在哪里崩溃?什么是最简单的输入仍然会触发崩溃?您在top=NULL
中也有一个输入错误,该错误将使您的进程崩溃。如果您使用调试器一步一步地执行,则应该会很突出。evaluate()函数不起作用@Botje“不起作用”是一个无用的诊断。它是否崩溃?产生错误值?循环?用黄色企鹅填充屏幕?使用调试器,逐步检查程序,查看pop函数中出错的原因。if语句总是覆盖top
。