一个算术表达式求值的RE问题

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<stack>
#include<cmath>
using namespace std;
char opter[1000]={0};//储存操作符
int opval[1000]={0};//储存操作数
int PointOpter=-1,PointOpval=-1;
char read[20]={0};
char compare[][8]=
                    {       //栈顶操作符
            //新读取操作符,比较关系为新读取操作符__栈顶操作符
                        {'<','<','<','<','>','x','<','>'},
                        {'<','<','<','<','>','x','<','>'}, 
                        {'>','>','<','<','>','x','<','>'},
                        {'>','>','<','<','>','x','<','>'},
                        {'>','>','>','>','>','x','>','>'},
                        {'<','<','<','<','=','x','<','x'},
                        {'>','>','>','>','>','x','<','>'},
                        {'<','<','<','<','x','<','<','='}
                    };
int Index(char ch)
{
    if(ch=='+')
        return 0;
    if(ch=='-')
        return 1;
    if(ch=='*')
        return 2;
    if(ch=='/')
        return 3;
    if(ch=='(')
        return 4;
    if(ch==')')
        return 5;
    if(ch=='^')
        return 6;
    if(ch=='#')
        return 7;
}
char Compare(char New,char top)
{
    int index1=Index(New);
    int index2=Index(top);
    return compare[index1][index2];
}
int Calculate(char ch,int v1,int v2)//v2位于栈顶,v1位于栈顶下一个
{
    if(ch=='+')
        return v1+v2;
    if(ch=='-')
        return v1-v2;
    if(ch=='*')
        return v1*v2;
    if(ch=='/')
        return v1/v2;
    if(ch=='^')
        return (int)(pow(v1,v2));
}
int GetValue()
{
    int num,End = 0;//End标记读完;
    opter[++PointOpter] = '#';
    char c;
    scanf("%s",read);
    while(PointOpter!=-1)
    {
        if(End)
            c = '#';
        if((strlen(read)==1&&!(read[0]>='0'&&read[0]<='9'))||End) //字符是操作符
        {
            if(!End)
                c = read[0];
            char c1,c2;
            int v1,v2;
            
            c1 = Compare(c,opter[PointOpter]);
            
            if(c1=='>')
            {
                opter[++PointOpter] = c;
                c= getchar();
                if(c=='\n')
                    End = 1;
                else
                {
                    memset(read,'\0',sizeof(read));
                    scanf("%s",read);
                }
            }
            else if(c1=='<')
            {
                c2=opter[PointOpter];
                PointOpter--;
                v2=opval[PointOpval];
                PointOpval--;
                v1=opval[PointOpval];
                PointOpval--;
                opval[++PointOpval] = Calculate(c2,v1,v2);
            }
            else if(c1=='=')
            {
                PointOpter--;
                if(c=='#')
                    break;
                c= getchar();
                if(c=='\n')
                    End = 1;
                else
                {
                    memset(read,'\0',sizeof(read));
                    scanf("%s",read);
                }
            
            }
            else
            {    
                cout<<"输入有误"<<endl;
                exit(0);
            }      
        }
        else
        {
            num = 0;
            int Minus = 0,i=0;//Minus标记读到负号,i标记读到哪个数
            c=read[0];
            if(read[0]=='-')
                Minus = 1,c=read[++i];
            while(i<(strlen(read)))
            {
                num = 10*num+(c-'0');
                c = read[++i];
            }
            if(Minus)
            {    num = -num,Minus = 0;  }
            
            opval[++PointOpval] = num;
            c= getchar();
            if(c=='\n')
                End = 1;
            else
            {
                memset(read,'\0',sizeof(read));
                scanf("%s",read);
            }
        }
    }
    return opval[0];
}
int main(void)
{
    int n;
    scanf("%d",&n);
    getchar();//读入换行符
    while(n--)
    {
        printf("%d\n",GetValue());
        PointOpval--;//将栈顶元素弹出
    }
    return 0;
}

用栈实现对表达式的求值,通过了样例但是提交到OpenJudge上时RE了,求助大神帮忙指出并修正错误,

题主发一下题目链接吧

啊抱歉忘了 http://hxsjjg.openjudge.cn/2021hw2/3/

opter和opval数组开小了,产生了数组越界