我正在尝试从一组单一的多项式创建一个多项式,并具有两者的结构。我的附录函数由于写入错误而导致失败,并且知道我需要为新单元分配空间,但不确定如何处理。任何帮助将不胜感激:
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:修改的多项式 M:添加的单元 多项式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* newMono( int c, int k) {
Mono m = {c, k, (Mono*)malloc(sizeof(Mono)) };
Mono * mp = (Mono*)malloc(sizeof(m));
return mp;
}
malloc返回非初始化的存储,因此此功能返回垃圾。施放malloc
的返回值也是没有用的。只需确保您的程序主管中有#include <stdlib.h>
即可。
尝试以下操作:
Mono *newMono(int coeff, int exp) {
Mono *p = malloc(sizeof *p); // Check for NULL return in production code
p->coeff = coeff;
p->exp = exp;
p->next = NULL;
return p;
}
遵循newPoly
的相同模式。显然,您正在尝试构建一个聚合,然后将其复制到malloc
ED内存中。这将起作用,但是这是浪费的,除非您的编译器足够聪明,可以消除额外的副本。只要以直接的方式做。
要附加,无需分配任何新存储。您只是在调整指针。
void appendMono(Poly *p, Mono *m) {
if (p->first) {
p->last->next = m;
p->last = m;
} else {
p->first = p->last = m;
}
}