2 lansinuonuo lansinuonuo 于 2016.09.17 23:18 提问

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

代码运行时崩溃中断后显示“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个回答

qq_35553864
qq_35553864   2016.09.17 23:42
已采纳

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

lansinuonuo
lansinuonuo 回复阿卡阿卡: 啊我是傻逼我是傻逼,谢谢谢谢il||li (OдO`) il||li
接近 2 年之前 回复
qq_35553864
qq_35553864 s=(list)malloc(sizeof(list)); 刚刚码错了,手机党伤不起。这句有问题哦!
接近 2 年之前 回复
qq_35553864
qq_35553864 list=(list)malloc(sizeof(list));这句有问题,看出来了吗?
接近 2 年之前 回复
lansinuonuo
lansinuonuo 我只是在测试read()函数的时候就会崩溃,崩溃后的提示显示不到我的源文件,重新调试时却能正常返回(ಥ _ ಥ)不知道该怎么办了
接近 2 年之前 回复
feng1790291543
feng1790291543   Ds   Rxr 2016.09.17 23:30

有可能分配空间失败或者 内存为空,指针赋值错误

lansinuonuo
lansinuonuo 谢谢谢谢,是这样的
接近 2 年之前 回复
lansinuonuo
lansinuonuo 我只是在测试read()函数的时候就会崩溃,崩溃后的提示都在底层,重新调试时却能正常返回(ಥ _ ಥ)找不到错在哪
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
7-1 一元多项式的乘法与加法运算(20 point(s))
7-1 一元多项式的乘法与加法运算(20 point(s)) 设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不
PAT 一元多项式的乘法与加法运算(链表 c++版)
题目按照指数递减的顺序给出两个一元多项式,输出两个多项式的乘积,还有 和 ,按照指数递减的顺序。 用链表实现一元多项式的乘法与加法运算。 首先来看加法运算 多项式 poly1   x^4 + 3x^3 + 6x 多项式 poly2   6x^5 + 4x^4 + 6 既然用到链表,自然少不了结构体 struct node{ int coef; //系数 int expn; //
02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。 输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例:4 3 4 -5 2 6 1 -
PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
使用Java语言和数组实现一元多项式的乘法与加法运算,其中主要内容包括,程序框架,函数分析和原代码。
PTA--一元多项式的乘法与加法运算
这个问题耗时90分钟才搞定,其中主要的逻辑用时30分钟,调输出格式用时60分钟。。。 我想起来这是我为什么很抵触去写OJ题,很多情况下是你想明白了问题的解法,但是在最后的格式输出上不能完全匹配,便被机器判定为错误的答案。 但是,做的多了,会爱上做OJ题,原因是,要准确匹配题中的所有要求,会逼着你认真思考问题的细节,哪怕是格式也要仔细判定。这不正是代码的特长,也是我们爱上写代码的原因吗?OK,回到
一元多项式的乘法与加法运算【Java实现--通过单项链表实现队列】
题目:设计函数分别求两个一元多项式的乘积与和。                 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。                 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空
7-2 一元多项式的乘法与加法运算(20 分)
#include using namespace std; typedef struct LNode * List; struct LNode { int coef; int expon; List Next; }; void Attach(List L, int coef, int expon) { if (!L) { L->coef = coef; L->expon = ex
[PAT] 02-线性结构2 一元多项式的乘法与加法运算
[PAT] 02-线性结构2 一元多项式的乘法与加法运算设计函数分别求两个一元多项式的乘积与和。输入格式说明:输入分2行。每行分别先给出多项式非零项的个数。再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式说明:输出分2行。分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。例子输入与输出:
7-2 一元多项式的乘法与加法运算
Written by Robert_Wang in Southwest University of Science And Technology.7-2 一元多项式的乘法与加法运算(20 分)设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输...
PAT 3-04 一元多项式的乘法与加法运算(C语言实现)
题目描述: 设计函数分别求两个一元多项式的乘积与和。 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式说明: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 样例