c언어 free()에 오류가 있는 것 같습니다..
글쓴이: 익명 사용자 / 작성시간: 화, 2021/09/21 - 12:41오전
결과가 이상하게 떠요..
분명 free도 맞게 한 것 같은데 하ㅜㅜ 도와주세요
#include <stdio.h> #include <stdlib.h> typedef int Element; typedef struct tStackNode { Element data; struct tStackNode *next; } StackNode; typedef struct { int count; StackNode *top; } Stack; Stack* CreateStack(int size) { Stack *pStack = (Stack *)malloc(sizeof(Stack)); if(pStack == NULL) return NULL; pStack->top = (StackNode *)malloc(size * sizeof(StackNode)); if(pStack->top == NULL){ free(pStack); return NULL; } pStack->top->next = (StackNode *)malloc(size * size * sizeof(StackNode)); pStack->count = 0; pStack->top = NULL; return pStack; } void Push(Stack *pStack, Element item) { StackNode *pNewNode = (StackNode *)malloc(sizeof(StackNode)); if(pNewNode == NULL) return; pNewNode->data = item; pNewNode->next = pStack->top; pStack->top = pNewNode; pStack->count++; free(pNewNode); //pNewNode = NULL; } Element Pop(Stack *pStack) { if(pStack->top == NULL) return 0; else { Element item = pStack->top->data; StackNode *pOldTop = (StackNode *)malloc(sizeof(StackNode)); pOldTop = pStack->top; pStack->top = pOldTop->next; free(pOldTop); //pOldTop = NULL; pStack->count--; return item; } } void DestroyStack(Stack *pStack) { if (pStack->top->next != NULL){ free(pStack->top->next); pStack->top->next = NULL; } if(pStack->top != NULL) { free(pStack->top); pStack->top = NULL; } if(pStack != NULL) free(pStack); return; } int main() { int i = 0; int item = 0; Stack *pStack = CreateStack(100); printf("Input 10 numbers :"); for(i = 0; i < 10; i++){ item = 0; scanf("%d", &item); Push(pStack, item); } printf("Reversed :"); while(pStack->count != -1){ item = Pop(pStack); printf("%d ", item); } printf("\n"); DestroyStack(pStack); pStack = NULL; return 0; }
Forums:
99.9999999999999999%의 경우에는 표준
99.9999999999999999%의 경우에는 표준 라이브러리 함수에 문제가 있는 것이 아니라 코드에 문제가 있습니다.
처음에 CreateStack 함수에서 pStack->top과 pStack->top->next에 메모리를 왜 이렇게 많이 할당시켜 둔 건가요? 코드만 보아서는 CreateStack, Push, Pop에 모두 할당이 들어가 있는데, 정확히 어떤 걸 의도하신 건가요? 처음에 스택을 만들 때 100개에 해당하는 메모리를 할당하는 것? 아니면 매번 원소를 추가할 때마다 동적으로 할당하는 것?
이곳에선 질문자의 노력이 보여야 답을 얻을 수 있음.
이곳에선 질문자의 노력이 보여야 답을 얻을 수 있음.
본인이 짠 프로그램이라면 기본기능(아이템 1개 추가후 프린트) 부터 잘 동작하는지 확인해보시길..
본인이 짠 것이 아니라면.. 일단 이해부터 먼저 하시길.
앗 저 해결했었습니다!
이틀 간 스택구조부터 다시 이해하고 push pop이해하니 술술 풀리더라구요.. 조언 감사합니다!
댓글 달기