나는 링크 된 목록을 사용하여 스택을 구현하는 데 지치 셨습니다. 그래서 나는 전역으로 만들었고 일부 스택 함수 (push, pop, isempty)를 만들었습니다. isempty와 push work는 훌륭하지만, 나는 pop 함수에 문제가있어, 잘 작동하지만 잘 모르겠지만 노드의 메모리를 해제하려고 할 때 (데이터를 저장 한 후에) poped가 작동하지 않고 오류가 발생합니다. 팝업 기능에서 "무료"라인을 삭제하면 멋지게 작동하지만 여기에서 문제가 있다는 것을 알고 있습니다. 사용 후 힙 메모리를 해제해야합니다 ... 그래서 어떻게해야합니까?C - 스택 구현, 무료 메모리 오류
이 코드의 일부입니다 :이 코드는 당신이 당신의 IsEmpty 함수를 (팝업 때 실수를 수정
#include <stdio.h>
#include <stdlib.h>
struct stack
{
int data;
struct stack* next;
};
struct stack* top = NULL; ///stack is global, so push and pop can use it.
int isEmpty()
{
if (top == NULL)
return 0;
else return 1;
}
void push(int x)
{
struct stack* temp = (struct stack*)malloc(sizeof(struct stack*));
if (temp == NULL)
{
printf("Error! no allocation!!");
return;
}
temp->data = x;
temp->next = top;
top = temp;
}
int pop()
{
struct stack* temp;
if (isEmpty() != 0)
{
temp = top;
int x = top->data;
top = top->next;
free(temp);
return x;
}
else
{
printf("stack is empty nothing to pop");
return -1;
}
}
int main()
{
push(1);
push(2);
push(3);
push(4);
push(5);
push(6);
push(7);
int cur;
while (isEmpty())
{
cur = pop();
printf("|%d|--->", cur);
}
printf("\n");
return 0;
}
'구조체 스택 * 온도 = (구조체 스택 *) malloc을 (를 sizeof (구조체 스택 비어 때
isempty
그것이 0 (false)를 반환 논리적 아니었다 반전 명확히 *하려면)'- 스택 자체의 크기가 아닌 스택에 대한 포인터의 크기를 할당합니다. 또한 malloc의 결과를 캐스팅하는 것은 눈살을 찌푸리게합니다. –'struct stack * temp = malloc (sizeof * temp)' –
"스택은 전역이므로 push와 pop은 사용할 수 있습니다." 그건 아주 잘못된 이유 다. 그러나 다시 한 번, 글로벌화 할 정당한 이유가 없을 것입니다. – bolov