구조체를 사용하여 단항 기호 그룹에서 다항식을 만들려고합니다. 잘못된 쓰기 오류로 인해 실패하고있는 append 함수가 있는데 새로운 monomial을위한 공간을 할당해야한다는 것을 알고 있지만 어떻게해야하는지 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다 :구조에 대한 쓰기가 올바르지 않습니다.
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으로 새로운 (빈) 다항식없고 monomials를 생성한다.
Poly* newPoly() {
int deg = 0;
Mono * first = NULL;
Mono * last = NULL;
Poly p = {deg, first, last};
Poly * point= (Poly*)malloc(sizeof(p));
return point;
}
}
이 함수는 다항식 페이지 내부 단항식을 추가 다항식이 m를 수정 :이게 된이 이 다항식 P는 m의 단독 소유자가 될 것으로 예상된다 추가 할 수 있습니다. 새로운 monomial이 목록의 끝에 추가되어야합니다. 이게 된 의 정도는 다항식
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* 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 * point = (Poly *) malloc (sizeof (Poly));'와 동일합니다. – YaatSuka
그것은 메모리를 할당하려는 나의 시도였습니다.나는 C가 정말 새로워서 malloc 문을 어디에 놓아야할지 모르겠다. – user8232299