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;
}