codice:
void pop (struct dato * s, int * d) {
   struct dato * p = s;
   d=malloc(sizeof(int));
   * d = s -> elemento;
   s = s -> punt;
   free (p);
}
Hai dimenticato di allocare il puntatore!!! Prova un po'!!!