No...non viene liberata quando torni al main...semplicemente la perdi.
Per ritornarla al main puoi usare una di queste due alternative (la seconda la preferisco):
codice:
void leggi_array(int **a, int *n);
{
int i;
....
*a = (int *)calloc(*n, sizeof(int));
int *tmp_a = *a;
for (i = 0; (i < *n); i++)
{
printf("Inserire elemento %d^: ", i + 1);
scanf("%d", tmp_a++);
}
}
main()
{
int *a, n;
leggi_array(&a, &n);
...
free(a); // Qua la liberi
}
seconda strada
codice:
int *leggi_array(int *n);
{
int i;
int *r;
....
*r = (int *)calloc(*n, sizeof(int));
int *tmp_r = r;
for (i = 0; (i < *n); i++)
{
printf("Inserire elemento %d^: ", i + 1);
scanf("%d", tmp_r++);
}
return r;
}
main()
{
int *a, n;
a = leggi_array(&n);
...
free(a); // Qua la liberi
}
Provale perchè io non le ho provate