Allora, il codice è:

double FUNZIONE(int n, float *x, float *y, float pt)
{
double *S,*B,*H,*G,val;
int intervallo;
B=(double *)malloc(n*sizeof(double));
H=(double *)malloc(n*sizeof(double));
S=(double *)malloc(4*sizeof(double));
G=(double *)malloc(n*sizeof(double));
Coeff_F(n,x,H,B);
Coeff_G(n,y,H,G);
G[0] = 0.0;
G[n] = 0.0;
Gauss(n,H,B,G);
BackSub(n,H,B,G);
intervallo=Ric_Bin(n,pt,x);
Coeff_Spline(intervallo,S,y,H,G);
val=Horner_Spline(x[intervallo],pt,S);
free(S);
free(B);
free(H);
free(G);
return val;
}

void main(void)
{
...................................
X=(float *)malloc(n*sizeof(float));
Y=(float *)malloc(n*sizeof(float));
....................................
....................................
do
{
printf("\nInserire pt: ");
scanf("%lf",&pt);
valutazione=FUNZIONE(n,X,Y,pt);
printf("\nIl valore di S(pt) e' : %lf\n",valutazione);
printf("\nValutare S in un altro punto? (si=1/no=0) ");
scanf ("%d",&quit);
}while(quit!=0);
free(X);
free(Y);
.................................................. ...........
}

Essendo la chiamata a FUNZIONE in un ciclo do-while, questa può essere ripetuta ovviamente più di una volta: alla seconda esecuzione, al momento della prima allocazione (quindi "B=(double *)malloc(n*sizeof(double));") il programma cade.

Grazie per l'aiuto.