| 
 
논리상의 오류는 차치하고 일단 문법오류를 알아보겠습니다.
 
 
 뚱뚜루 님이 쓰신 글 :
 : 이하의 소스에서 에러체크라고 써진데 매개변수및 링크를 위한 링크타입이 어떻게 되는지 알고싶습니다. 물론 이유까지 써주시면 고맙겠습니다.
 : 
 : 매개변수로 주소를 보내주는동적할당은 잘못합니다.. 이해하기 쉽게 설명부탁드립니다.
 : 
 : #include<stdio.h>
 : #include<stdlib.h> // exit()
 : #include<malloc.h> // malloc()
 : #include<string.h> // memset()
 : #define IS_FULL(p) (!(p))
 : 
 : 
 : typedef struct _PTR ptr;
 : struct _PTR
 : {
 :     float coef;
 :     int exp;
 :     ptr *link;
 : };
 : 
 : void attach(float coefficient, int exponent, ptr **txt) // error check
 : {
 :     ptr *temp;
 :     temp = (ptr *) malloc(sizeof(ptr));
 :     memset(temp,0,sizeof(ptr));
 :     if (IS_FULL(temp))
 :     {
 :         printf("We cannot attach new term since the memory is full\n");
 :         return;
 :     }
 :     temp-> coef= coefficient ;
 :     temp-> exp= exponent;
 : // 복잡하게 temp에 넣고 그것을 rear에다 대입한다.
 :     (*txt)->link= temp; // error check
 :     *txt= temp;
 : }
 : 
 : 
 : int compare(int exp1, int exp2)
 : {
 :     if (exp1 = exp2) if (exp1 == exp2)으로 고쳐야.
 
 :         return 0;
 :     if (exp1 < exp2)
 :         return -1;    
 :     else 
 :         return 1;
 : }
 : 
 : ptr* padd(ptr *p, ptr *q)
 : {
 : /* 함수내에서 rear변수는 정확하게 정해진 타입이 아님. 
 :       rear은 모두 error check*/
 :     ptr *front, *rear, *temp;
 :     float sum; // data type is float by recommend.
 :     //rear = (ptr *) malloc(sizeof(ptr)); // rear is return value
 :     //memset(rear,0,sizeof(ptr)); // return setting
 :     if(IS_FULL(rear))
 :     {
 :         fprintf(stderr,"We cannot add two polynomials since the memory is full\n");
 :         exit(1);
 :     }
 :     front = rear;
 rear는 최초에 메모리를 할당해주어야 합니다.
 :     while ((p) && (q))
 :     
 :         /* 다항식 P(x) 항의 차수와 Q(x)항의 차수를 비교 */
 :         switch(compare(p->exp, q->exp)) 
 :         {
 :             case -1 :
 :                 attach( q->coef, q->exp, &rear);
 :                 q= q->link;
 :                 break;
 : 
 :         /* 다항식 P(x) 항의 차수와 Q(x)항의 차수보다 적을 때 
 :          * Q(x)의 항을 하나 추가하고, 포인터 q가 다항식 Q(x)의
 :          * 다음 항을 가리키도록 한다.
 :          */
 :             case 0 :
 :                 sum = p->coef + q->coef;
 :                 if (sum) 
 :                     attach(sum, p->exp, &rear);
 :                 p=p->link;
 :                 q=q->link;
 :                 break;
 : 
 :             case 1:
 :                 attach(p->coef, p->exp, &rear);  
 :                 p=p->link;
 :         }
 :     for(; p; p=p->link) 
 :         attach(p->coef, p->exp, rear); attach(p->coef, p->exp, &rear);
 :     for(; q; q=q->link) 
 :         attach(q->coef, q->exp, rear); attach(q->coef, q->exp, &rear);
 :     rear->link =NULL;
 :     temp = front; 
 :     front = front ->link;
 :     free(temp);
 :     return &front; return front;로 해야
 : }
 : 
 : void init(ptr **p, ptr **q)
 : {
 :     ptr *w, *x, *y; 
 :     *p = (ptr *) malloc(sizeof(ptr));
 :     *q = (ptr *) malloc(sizeof(ptr));
 : 
 :     (*p)->coef = -3;
 :     (*p)->exp = 5;
 :     w=(ptr *) malloc(sizeof(ptr));
 :     (*p)->link = w;
 : 
 :     w->coef=2;
 :     w->exp =2;
 :     x =(ptr *) malloc(sizeof(ptr));
 :     w->link = x;
 : 
 :     x->coef=9;
 :     x->exp =1;
 :     y =(ptr *) malloc(sizeof(ptr));
 :     x->link = y;
 :     
 :     y->coef=-1;
 :     y->exp =0;
 :     y->link = NULL;
 : 
 :     (*q)->coef = -2;
 :     (*q)->exp = 5;
 :     w=(ptr *) malloc(sizeof(ptr));
 :     (*q)->link = w;
 : 
 :     w->coef=3;
 :     w->exp =3;
 :     x =(ptr *) malloc(sizeof(ptr));
 :     w->link = x;
 : 
 :     x->coef=-4;
 :     x->exp =2;
 :     y =(ptr *) malloc(sizeof(ptr));
 :     x->link = y;
 :     
 :     y->coef=6;
 :     y->exp =0;
 :     y->link = NULL;    
 : }
 : 
 : main()
 : {
 :     ptr *p, *q, *r;
 :     /* int *p라고 선언되었다면 
 :      * *p는 *p가 가리키는곳의 값 
 :      *  p는 가리키는곳의 주소(값) 
 :      * &p는 현재 p의 주소. 
 :      */
 :     init(&p, &q);
 :     printf("Data Init .. ok\n");
 :     printf("Result Value Memory Allocation .. ok\n");
 : 
 :     r=padd(p,q);
 :     printf("Result Value Memory Insert .. ok\n");
 : 
 :     while(r)
 :     {
 :         printf("%d ",r->coef,r->exp);
 :         r=r->link;
 :     }
 :     printf("\n");
 : }
 
    |