gpt4 book ai didi

c - 尝试在 C 中执行 RPN 时如何修复段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:18 26 4
gpt4 key购买 nike

我正在尝试制作一个将使用 RPN 的程序,它将计算一系列整数。我有一些无法更改的标准函数(poppush)。但是当我运行下面的代码时,出现了段错误。

因为我无法改变这两个函数的内部核心,所以我尝试改变我调用它们的方式(我将 stack[] 设为动态数组,将 top 一个 int 指针)但没有任何变化。

#include <stdio.h>
#include <stdlib.h>
#define N 1000

void push(int stack[],int *t,int obj)
{
if((*t)==(N-1))
{
printf("Stack overflow...\n");
getchar(); //getc
abort();
}
else
stack[++(*t)]=obj;
}

int pop(int stack[],int *t)
{
int r;
if((*t<0))
{
printf("Stack empty...\n");
printf("Error in expresion.\n");
getchar(); //getc
abort();
}
else
r=stack[(*t)--];
return(r);
}

int isdigit(char in)
{
int flag;

if (in>=48 && in<=57) //if its terminus
flag=1;
else if(in==42 || in==43 || in==45 || in==47) //if its operator
flag=2;
else
flag=0;

return flag;
}

int main(int argc, char** argv) {

int *stack=(int*) malloc(N*sizeof(int));
char input;
int i=0,*top=0,flag;
int num1,num2;
float result;

if (stack == NULL) {
printf("Out of memory!\n");
return (1);
}
printf("Give the Formula: ");
while(input=getchar())
{
flag=isdigit(input);
if(flag==1) //if its terminus
{
push(&stack[i],top,input);
}
if(flag==2) //if its enforcer
{
num1=pop(&stack[i],top);
num2=pop(&stack[i+1],top);
if (input==42) //case of +
result=num1+num2;
if (input==43) //case of *
result=num1*num2;
if (input==45) //case of -
result=num2-num1;

if (input==47) //case of /
if(num2!=0)
result=num2/num1;
else
printf("Can't do the operation");
push(&stack[i],top,result);
}
if(flag==0) //case of everything else
{
printf("Error");
exit(1);
}
printf("Operand: %c\n",input);
// for(int j=0;j<strlen(stack);j++)
// printf("stack[%d]=%d\n",i,stack[j]);
//printf current status of stack

i++;
}
return (EXIT_SUCCESS);
}

如果你有一系列的整数,比如234+*,堆栈应该首先是2,3,4,+,*,其次是5, 4,*,第三个20

最佳答案

main 中,您将 top 定义为指针并将其初始化为指向 null。

之后,在 push 中,您尝试通过 *t 取消引用 null 位置。此处出现段错误。

关于c - 尝试在 C 中执行 RPN 时如何修复段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com