salve, ho scritto questo programmino per simulare le operazioni su stack, sembra funzioni, ma non capisco come mai, mi visualizza un array "sporco"... nonostante la calloc iniziale che me lo restituisce "vuoto"... sarà sicuramente una sciocchezza... ma non riesco ad individuarla

posto di seguito il listato:

codice:
#include<stdio.h>
#include<stdlib.h>
#define MAX 10

/* Simulare in C la gestione di una pila (stack) tramite array statico
(può essere anche un array di struct) creando
le funzioni di manipolazione push() [inserimento] e pop() [eliminazione].
Il programma deve prevedere un menù
che consenta di scegliere l’operazione da eseguire.*/

void	push(char*,char,int*);
void	pop(char*,int*);
void	visualizza(char*);

int main ()
{
   short x=0;
   char *stack;
   int elem,head=-1;

   stack=(char*)calloc(MAX+1,sizeof(char));

   printf("Menu:\n\n1) effettuare operazione di push [inserimento]");
   printf("\n2) effettuare operazione di pop [estrazione]");
   printf("\n3) uscire dal programma");

while(x!=3)
 {
   printf("\n\noperazione: ");
   fflush(stdin);
   scanf("%d",&x);

   if(x==1)
   {
      fflush(stdin);
      printf("inserire dato: ");
      scanf("%c",&elem);
      push(stack,elem,&head);
      visualizza(stack);
   }

   else if(x==2)
   {
    pop(stack,&head);
    visualizza(stack);
   }
   else if (x==3)
   {printf("uscita!"); exit(1);}
 }
   return 0;
}

void push(char *a, char elem, int *head)
{
	if(*head == MAX - 1)
	{
		printf("Non e' possibile inserire altri dati stack pieno");
		exit(1);
	}
	else
	{
		*(a + ++ *head) = elem;
		printf("\nElemento inserito\n");
	}
}


void pop(char *a, int *head)
{
	if(*head == -1)
	{
		printf("\nNon e' possibile eliminare stack vuoto");
		exit(1);
	}
	else
	{
		*(a +*head) = ' ';
		(*head)--;
		printf("\nElemento eliminato\n");
	}fflush(stdin);
}

void visualizza(char *a)
{
	short	i;

	for(i=0; i<MAX; i++)
    printf("a[%d] %c\n",i,a[i]);

}
Grazie in anticipo