Varie cosucce

fai attenzione a come passi gli argomenti, ed a come usi i puntatori.
in realtà il codice era perfetto, bastava inizializzare *a:
codice:
int *a = NULL, n;
leggi_array(a, &n);
etc...
poi, al limite, si può far notare che il cast con la calloc è inutile
e che manca il return;
@Samuele_70: fossi in te ricontrollerei il tuo codice...
codice:
void leggi_array(int *&, int &); /* Errore. */
int main(void)
{
...
for(int i=0; (i<n); i++) /* Errore. Non standard. */
...
system("PAUSE"); /* Non portabile, meglio getchar(). */
return 0;
}