C언어 linked list 문제에서 nullptr 오류 관련 질문입니다

조회수 634회

linked list 를 사용하여 다항식 A,B가 지수값과 랜덤값으로 입력받아 더하여 다항식 C를 구하는 프로그램입니다. 근데 addPoly 메소드에서 nullptr 라고 오류가 계쏙 뜹니다. 각 포인터도 addNode를 통해 동적할당과 연결을 해줬는데도 오류가 떠서 어떤게 문제인지 알고 싶어 질문드립니다.

/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<time.h>

typedef struct node {
    int coef;
    int expo;
    struct node* link;
}; node;

void addNode(node** head, int coef, int expo) {
    node* p = *head;
    node* temp = (node*)malloc(sizeof(node));
    temp->coef = coef;
    temp->expo = expo;
    temp->link = NULL;
    if (*head == NULL) {
        *head = temp;
        return;
    }
    while (p->link)p = p->link;
    p->link = temp;
}

node* addPoly(node* A, node* B) {
    node* C = NULL;

    while (A->expo !='\0' || B->expo !='\0') {
        if (A->expo > B->expo) {
            addNode(&C, A->coef, A->expo);
            A = A->link;
        }
        else if (A->expo < B->expo) {
            addNode(&C, B->coef, B->expo);
            B = B->link;
        }
        else
        {
            if (A->coef + B->coef == 0) {
                A = A->link;
                B = B->link;
            }
            else {
                addNode(&C, A->coef + B->coef, A->expo);
                A = A->link;
                B = B->link;
            }
        }
    }
    return C;
}

void showList(node* D) {
    node* p = D;
    while (p) {
        printf("%s%dx^%d", p->coef > 0 ? "+" : "", p->coef, p->expo);
        p = p->link;
    }
}

int SelectPlusMinus(int a) {
    int randNum;
    randNum = (rand() % 100) + 1;
    if (randNum >= 50)
        return a;
    else
        return -a;
}
int main() {
    int expo1, expo2;
    int rannum1, ranCoef1, coefNum1;
    int rannum2, ranCoef2, coefNum2;

    srand(time(NULL));
    printf("첫번째 다항식의 차수를 입력하세요\n");
    scanf("%d", &expo1);
    printf("첫번째 다항식을 랜덤으로 생성합니다.\n");

    node* A = NULL;
    ranCoef1 = (rand() % 10) + 1;
    coefNum1 = SelectPlusMinus(ranCoef1);
    addNode(&A, coefNum1, expo1);
    for (int i = expo1-1; i >= 0; i--) {
        rannum1 = (rand() % 100) + 1;
        if (rannum1 >= 70) {
            ranCoef1 = (rand() % 10) + 1;
            coefNum1 = SelectPlusMinus(ranCoef1);
            addNode(&A, coefNum1, i);
        }
        else
            continue;
    }
    showList(A);

    printf("\n두번쨰 다항식의 차수를 입력하세요\n");
    scanf("%d", &expo2);
    printf("두번째 다항식을 랜덤으로 생성합니다.\n");

    node* B = NULL;
    ranCoef2 = (rand() % 10) + 1;
    coefNum2 = SelectPlusMinus(ranCoef2);
    addNode(&B, coefNum2, expo2);
    for (int j = expo2-1; j >= 0; j--) {
        rannum2 = (rand() % 100) + 1;
        if (rannum2 >= 70) {
            ranCoef2 = (rand() % 10) + 1;
            coefNum2 = SelectPlusMinus(ranCoef2);
            addNode(&B, coefNum2, j);
        }
        else
            continue;
    }
    showList(B);

    node* C = NULL;
    C = addPoly(A, B);

    printf("\n계산된 다항식을 출력합니다.\n");
    showList(C);
}

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)