소스의 문제점은 무엇인가요?
셋삥
#include stdio.h#include stdlib.h
typedef struct ListNode{ float coef; int expo; struct ListNode* link;} ListNode;
typedef struct ListHead{ ListNode* head;}ListHead;
ListHead* createLinkedList(void){ ListHead* L; L = (ListHead *)malloc(sizeof(ListHead)); L-head = NULL; return L;}
void addLastNode(ListHead* L, float coef, int expo){ ListNode* newNode; ListNode* p; newNode = (ListNode *)malloc(sizeof(ListNode)); newNode-coef = coef; newNode-expo = expo; newNode-link = NULL; if(L-head = newNode){ L-head = newNode; return; } else { p = L-head; while(p-link != NULL) { p = p-link; } p-link = newNode; }}
void addPoly(ListHead* A, ListHead* B, ListHead* C) { ListNode* pA = A-head; ListNode* pB = B-head; float sum; while(pA && pB){ if(pA-expo == pB-expo){ sum = pA-coef + pB-coef; addLastNode(C, sum, pA-expo); pA=pA-link; pB=pB-link; } else if(pA-expo pB-expo){ addLastNode(C, pA-coef, pA-expo); pA=pA-link; } else { addLastNode(C, pB-coef, pB-expo); pB=pB-link; } } for( ; pA!=NULL; pA=pA-link) addLastNode(C, pA-coef, pA-expo); for( ; pB!=NULL; pB=pB-link) addLastNode(C, pB-coef, pB-expo);} void printPoly(ListHead* L){ ListNode* p = L-head; for(;p;p=p-link){ printf(%3.0fx^%d, p-coef,p-expo); }} void main(void){ ListHead *A, *B, *C; A = createLinkedList(); B = createLinkedList(); C = createLinkedList(); addLastNode(A, 4, 3); addLastNode(A, 3, 2); addLastNode(A, 5, 1); printf(\n A(x)=); printPoly(A); addLastNode(B, 3, 4); addLastNode(B, 1, 3); addLastNode(B, 2, 1); addLastNode(B, 1, 0); printf(\n B(x)=); printPoly(B); addPoly(A, B, C); printf(\n C(x)=); printPoly(C); getchar();}
교수님이 이 소스의 치명적인 문제점이 있다고 하셨어요 ... 뭔가요? ㅠㅠ
-
도손
음... 그렇군요.
메모리 누수! -
안토니
메모리를 잡아 먹어서 쓰기때문에 free함수를 써서 메모리를 돌려줘야하는데
안돌려주면 죽을때까지 계속 써먹기때문에 공간 낭비... 한거레요 -
뭘봐요
대충 훑어봐서 잘 모르겠지만,
NULL 포인터가 함수의 인수로 들어올때의 체크라던지,
malloc 의 성공 여부 체크 등이 빠진것 같은데,
그것 일지도 모르겠네요.