두 번째 Pop()
호출에서 다음 코드가 충돌합니다. 저는 C로 초보자이며 한 시간 이상이 코드를 쳐다 보면서 오류를 볼 수 없습니다. 이 코드가 왜 충돌하는지에 대한 나를 도울 수있는 아이디어가 있습니까?스택에서 항목을 검색하는 동안 C 프로그램에서 충돌이 발생합니다.
#include <stdio.h>
#define StackDataSize 100
typedef struct Stack
{
int index;
void *data[StackDataSize];
} Stack;
void* Pop(Stack *s)
{
if(s->index >= 0)
{
return s->data[s->index--];
}
else
{
fprintf(stderr, "ERROR: Stack Empty\n");
return NULL;
}
}
void Push(Stack *s, void *v)
{
if(s->index < StackDataSize)
{
s->data[++s->index] = v;
}
else
{
fprintf(stderr, "ERROR: Stack Full\n");
}
}
int main(void)
{
Stack s = {-1}, *intstack = &s;
int x = 123456;
Push(intstack, &x);
printf("%d\n", *(int*)Pop(intstack));
printf("%d\n", *(int*)Pop(intstack));
return 0;
}
디버거에서 밟았습니까? 각 행에서 멈추고 s를 확인하고 널 (null)을 나타냅니다. –