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이해하니 술술 풀리더라구요.. 조언 감사합니다!
댓글 달기