我试图从一组单项式中创建一个多项式,并且都有一个结构体。我有一个追加函数,由于无效的写入错误而失败,并且知道我需要为新单项分配空间,但不知道如何去处理它。任何帮助将不胜感激:在结构上写入无效
typedef struct Monomial {
typede Monomial {
int coeff; /* coefficient */
int exp; /* exponent */
struct Monomial *next; /* next monomial */
} Mono;
typedef struct Polynomial {
int deg; /* degree */
Mono* first; /* first monomial */
Mono* last; /* last monomial */
} Poly;
该函数创建一个新的单项式具有给定的系数和功率。 c:系数 k:功率 函数分配一个单项并初始化它的属性。 返回值是一个指向新创建的单项式的指针。
Mono* newMono(int c, int k) {
Mono m = {c, k, (Mono*)malloc(sizeof(Mono)) };
Mono * mp = (Mono*)malloc(sizeof(m));
return mp;
}
该函数创建与0度新的(空)多项式和无 单项式。
Poly* newPoly() {
int deg = 0;
Mono * first = NULL;
Mono * last = NULL;
Poly p = {deg, first, last};
Poly * point= (Poly*)malloc(sizeof(p));
return point;
}
}
此功能增加了一个单项式的多项式 P内:多项式来修改 米:单项式添加 多项式P预期为m的唯一所有者。 新单词应添加在列表的末尾。 单项式的程度应不超过多项式
void appendMono(Poly* p, Mono* m) {
if((*p).first){
Mono* l = (*p).last;
(*l).next = m; //ERROR IS HERE
(*p).last = m;
}
else {
(*m).next = (Mono*)malloc(sizeof(Mono));
(*p).first=m;
(*p).last=m;
}
}
此功能分配,读取并返回一个多项式的程度。 它首先要求最高度 然后它读取所有单项式(它们以增加的幂次数给出)作为整数对(空白分隔) 并将它们添加到多项式中。 它最终返回构造的poly。
Poly* readPoly() {
//TODO
Poly* p = newPoly;
int deg;
int pow, coef;
scanf("%d", °);
while(scanf("%d %d", &pow, &coef)){
Mono * m = newMono(pow, coef);
appendMono(p, m); //ERROR CALLED FROM HERE
}
return p;
}
这是做什么的,除了泄漏内存? 'Mono m = {c,k,(Mono *)malloc(sizeof(Mono))};'与此相同,尽管它不泄漏内存,但它立即超出范围。 'Poly p = {deg,first,last};' –
'Poly * point =(Poly *)malloc(sizeof(Poly));' – YaatSuka
这只是我分配内存的尝试。我对C非常陌生,所以我不知道应该在哪里放置malloc语句 – user8232299