lansinuonuo 2016-09-17 15:18 采纳率: 100%
浏览 3295
已采纳

一元多项式的乘法与加法运算

代码运行时崩溃中断后显示“0x773C6054 (ntdll.dll) (study1.exe 中)处有未经处理的异常: 0xC0000374: 堆已损坏。 (参数: 0x773E2378)。”,但在调试时正常输出,找不出问题所在,希望能得到老师的帮助

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    int coe;
    int index;
    struct node* next;
}*list;

list read(void);
void print(list a);
list add(list a,list b);
list mul(list a,list b);

int main()
{
    list a,b,multi,addin;

    a=read();
    b=read();
    multi=mul(a,b);
    addin=add(a,b);
    print(multi);
    printf("\n");
    print(addin);

    return 0;
}

list add(list a,list b)
{
    list p,q,s,m;
    p=a;
    q=b->next;
    while(p->next!=NULL&&q!=NULL)
    {
        m=q->next;
        if(q->index>p->next->index)
        {
            s=p->next;
            p->next=q;
            q->next=s;
            q=m;
        }
        else if(q->index==p->next->index)
        {
            p->next->coe+=q->coe;
            q=m;
        }
        else
        {
            p=p->next;
        }
    }
    if(p->next==NULL&&p==a)
        return b;
    else if(p->next==NULL)
        p->next=q;
    return a;
}

list mul(list a,list b)
{
    list multi;
    list l[1000];
    int i,j;
    list p,q;
    list m,s;

    p=a->next;
    q=b->next;
    multi=(list)malloc(sizeof(struct node));
    multi->next=NULL;

    i=0;
    while(p!=NULL)
    {
        l[i]=(list)malloc(sizeof(struct node));
        m=l[i];
        while(q!=NULL)
        {
            s=(list)malloc(sizeof(struct node));
            s->coe=p->coe*q->coe;
            s->index=p->index+q->index;

            m->next=s;
            m=s;
            q=q->next;
        }
        m->next=NULL;

        q=b->next;
        i++;
        p=p->next;
    }

    for(j=0;j<i;j++)
    {
        multi=add(multi,l[j]);
    }

    return multi;
}

list read(void)
{
    int K;
    int i;
    list h,s,p;
    scanf("%d",&K);
    h=(list)malloc(sizeof(struct node));
    p=h;
    for(i=0;i<K;i++)
    {
        s=(list)malloc(sizeof(list));
        scanf("%d%d",&s->coe,&s->index);
        p->next=s;
        p=s;
    }
    p->next=NULL;
    return h;
}

void print(list a)
{
    int sam=0;
    list p;
    p=a->next;
    while(p!=NULL)
    {
        if(p->coe!=0)
        {
            sam=1;
            printf("%d %d ",p->coe,p->index);
        }
        else
            ;
        p=p->next;
    }
    if(sam==0)
        printf("0 0 ");
    printf("\b");
}

  • 写回答

2条回答

  • 阿卡阿卡 2016-09-17 15:42
    关注

    一个函数一个函数进行单独测试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。