Ho fatto anch'io così:
double FUNZIONE(int n, float *x, float *y, float pt)
{
double *S,*B,*H,*G,val;
int range;
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);
//range=Ric_Bin(n,pt,x);
//Coeff_Spline(range,S,y,H,G);
//val=Horner_Spline(x[range],pt,S);
free(S);
free(B);
free(H);
free(G);
return val;
}
int main(void)
{
int n=2, quit;
float *X, *Y, pt;
double valutazione;
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);
return 0;
}
e si, è vero non dà più errore d'allocazione, ma prova a cambiare n=2 con n=5 e siamo punto e a capo.
Questo tra l'altro "scagiona" le altre funzioni visto che ora non vengono proprio richiamate, giusto?
E poi, con n=2 sai quand'è che da errore? All'ultima riga del main, su free(Y).
I misteri della programmazione...