这个程序中的分段错误在哪里?

时间:2015-10-23 17:49:24

标签: c gcc segmentation-fault

在编译以下程序时,我遇到了分段错误(核心转储)。

我正在使用MinGW编译器进行编译。

程序应该以字符串的形式接受有效的POSTFIX表达式,然后从左到右遍历整个字符串并对其进行评估。它应该将结果发送回main(),然后显示在控制台上。

#include "stdio.h"
#include "stdlib.h"

typedef enum {plus,minus,mul,divide,mod,eos,opnd} precedence;


int evaluate(char postfix[]);
precedence get_token();

void push(int number,int *top, int stk[]);
int pop(int *top,int stk[]);
int operation(int op1, int op2, precedence token);


int main(){
    char postfix[10];
    printf("Enter a valid POSTFIX EXPRESSION\n");
    scanf("%s",postfix);
    puts(postfix);
    printf("\n The result of the expression is %d ",evaluate(postfix));
    return 0;
    }

precedence get_token(char *symbol, int *n, char postfix[]){
    *symbol = postfix[*n++];
        switch(*symbol){

        case '+': return plus;
                  break;
        case '-': return minus;
                  break;
        case '*': return mul;
                  break;
        case '/': return divide;
                  break;
        case '%': return mod;
                  break;
        case '\0':return eos;
                  break;
        default :return opnd;
                    break;
        }//end of switch
}//end of get_token()


int evaluate(char postfix[]){

    int stk[10], res,top=-1,n=0,op1,op2,result;
    char symbol;

    precedence token= get_token(&symbol,&n, postfix);

        while(token!=eos){
            if(token==opnd){
                push(symbol-'0',&top,stk);
            }

            else{

                op2= pop(&top,stk);
                op1=pop(&top,stk);

                result=operation(op1,op2,token);

                push(result,&top,stk);
                    }//end of else

                    token=get_token(&symbol,&n,postfix);
        }//end of while

        res=pop(&top,stk);
        return res;
        }//end of evaluate()

void push(int number, int *top, int stk[]){

    stk[++(*top)]=number;
}


int pop(int *top, int stk[]){
        return stk[(*top)--];
        }

int operation(int op1, int op2, precedence token){

switch(token){
    case plus: return op1+op2;
    case minus: return op1-op2;
    case mul: return op1*op2;
    case divide: return op1/op2;
    case mod: return op1%op2;
}//end of switch
}// end of operation()

0 个答案:

没有答案