Чтобы повторить все предыдущие ответы, проблема в том, что второй вызов Pop возвращает NULL, который вы пытаетесь разыменовать во втором вызове printf ().
На чисто информационной ноте с использованием стеков на основе массива немного проще, если вы растете сверху вниз, а не наоборот:
void Push(Stack *s, void *v)
{
if (s->index)
s->data[--s->index] = v;
else
// overflow
}
void *Pop(Stack *s)
{
if (s->index < StackDataSize)
return s->data[s->index++];
else
{
// underflow
return NULL;
}
}
...
Stack s = {StackDataSize, {NULL}};
Таким образом, 0
не становится частным случаем.