편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.10.20

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


    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);
    }
    
  • 프로필 강상우님의 편집
    날짜2021.10.19

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


    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);
    }