我試圖從一組單項式中創建一個多項式,並且都有一個結構體。我有一個追加函數,由於無效的寫入錯誤而失敗,並且知道我需要爲新單項分配空間,但不知道如何去處理它。任何幫助將不勝感激:在結構上寫入無效
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