以下代碼在第二個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和索引是否爲空值。 – 2010-01-06 23:02:27