啊阿啊胖 2017-04-01 05:24 采纳率: 33.3%
浏览 813
已采纳

代码有问题,求大神解答

图片说明

 #include<stdio.h>
#include<malloc.h>
#include<iostream>
using namespace std;
#define MAXSize 10000
struct
{
    char data;
    int n;
}nei[]={{'=',0},{'(',1},{'+',3},{'-',3},{'*',5},{'/',5},{')',6}},
    wai[]={{'=',0},{'(',6},{'+',2},{'-',2},{'*',4},{'/',4},{')',1}};
struct sqstack
{
    char data;
    struct sqstack *next;
};
void initstack(struct sqstack* &);
void push(struct sqstack* &,struct sqstack *,struct sqstack *);
void jisuan(struct sqstack *);
int waishu(char );
int main()
{
    struct sqstack *L1,*L,*L2;
    int i,n;
    initstack(L);
    initstack(L1);
    initstack(L2);
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        L->next=NULL;
        push(L,L1,L2);
        jisuan(L);
        if(i!=n-1)printf("\n");
    }
    return 0;
}
void initstack(struct sqstack* &L)
{
    L=new sqstack;
    L->next=NULL;
}
int neishu(char c)
{
    int i=0;
    for(i=0;i<7;i++)
    {
        if(nei[i].data==c)
            return nei[i].n;
    }
}
int waishu(char c)
{
    int i=0;
    for(i=0;i<7;i++)
    {
        if(wai[i].data==c)
            return wai[i].n;
    }
}
void push(struct sqstack* &L,struct sqstack *L1,struct sqstack *L2)
{
    struct sqstack *newnode=NULL,*p=NULL,*q=NULL;
    char a[MAXSize];
    int i=0,n=0;
    cin>>a;
    newnode=new sqstack;
    newnode->data='=';
    newnode->next=L1;
    L1=newnode;
    while(1)
    {
        if(a[i]!='('&&a[i]!='+'&&a[i]!='-'&&a[i]!='*'&&a[i]!='/'&&a[i]!=')'&&a[i]!='(')
        {
            while(a[i]>='0'&&a[i]<='9')
           {
            newnode=new sqstack;
            newnode->data=a[i];
            newnode->next=L2;
            L2=newnode;
            i++;
           }
            newnode=new sqstack;
            newnode->data='#';
            newnode->next=L2;
            L2=newnode;
        }
            while(1)
            {
                if(neishu(L1->data)>waishu(a[i]))
                {
                    p=L1;
                    L1=L1->next;
                    p->next=L2;
                    L2=p;
                    break;
                }
                if(neishu(L1->data)<waishu(a[i]))
                {

                    if(a[i]=='\0')
                    {
                        while(L1->data!='=')
                        {
                            p=L1;
                            L1=L1->next;
                            p->next=L2;
                            L2=p;
                        }break;
                    }
                    else
                    {
                        newnode=new sqstack;
                        newnode->data=a[i];
                        newnode->next=L1;
                        L1=newnode;
                    }
                    i++;
                    break;
                }
                if(neishu(L1->data)==waishu(a[i]))
                {
                    p=L1;
                    L1=L1->next;
                    delete p;
                    i++;
                }
                if(L1->data=='=')break;
            }
            if(a[i]=='\0')break;
    }

    while(L2->next!=NULL)
    {
        p=L2;
        L2=L2->next;
        p->next=L;
        L=p;
    }
}
void jisuan(struct sqstack *L)
{
    struct sqstack *p;
    int i=0,j=0,k=0,m=0,n=0,a[MAXSize];
    while(L->next!=NULL)
    {
        switch(L->data)
        {
        case '+':
            a[j-2]=a[j-1]+a[j-2];j--;break;
        case '-':
            a[j-2]=a[j-2]+a[j-1];j--;break;
        case '*':
            a[j-2]=a[j-1]*a[j-2];j--;break;
        case '/':
            a[j-2]=a[j-2]/a[j-1];j--;break;
        default:
            if(L->data!='#')
                i=i*10+(L->data-48);
            else
            {
                a[j]=i;
                i=0;
                j++;
            }
            break;
        }
        p=L;
        L=L->next;
        delete p;
    }
    printf("%d",a[j-1]);
 }

测试数据
3
3+5*8
(3+5)*8
(23+34*45/(5+6+7))

  • 写回答

1条回答 默认 最新

  • keivin2006 博客专家认证 2017-04-01 07:32
    关注

    HEAP: Free Heap block XXXX modified at XXXX after it was freed

    就是说已经释放的堆内存被修改了,一般就是new/malloc 后的内存,在被delete/free后又被使用了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘