Salve a tutti!
Ho scritto questo codice, che serve a calcolare la derivata di un polinomio:
typedef int *poly;
typedef poly *der;
der derivative(poly P, int N, int k);
int calcolaDerivata(int coeff, int grado);
der derivative(poly P, int N, int k)
{
int i, j, f;
der d;
poly p2;
poly pp;
d = calloc(N, sizeof(poly));
p2 = calloc(k+1, sizeof(int));
for( i=0; i<N; i++ )
{
p2 = calloc(k+1, sizeof(int));
for( j=0; j<=k; j++ )
{
p2[j] = calcolaDerivata(P[j], j+1);
printf("%d: %d -- %d\n",j,P[j],p2[j]);
}
k -= 1;
d[i] = p2;
printf("\n\nIndirizzo: %p\n\n", p2);
pp=d[i];
printf("i: %d\nd: %d %d %d %d\n",i, pp[0], pp[1], pp[2], pp[3] );
getch();
for( f=0; f<=k; f++ )
P[f]=p2[f+1];
free(p2);
}
pp=d[0];
printf("\n\nUscita ciclo:\n\ni: %d\nd: %d %d %d %d",i, pp[0], pp[1], pp[2], pp[3] );
getch();
return d;
}
int calcolaDerivata(int coeff, int grado)
{
if( grado == 1 )
return 0;
else
return coeff*(grado-1);
}
poly è semplicemente un array di interi, der è un array di poly.
Senza stare a dilungarmi sul funzionamento, il mio problema è che, ciclando per i, quando assegno a d
il poly p2 mi sovrascrive con l'ultimo valore di p2 TUTTI gli elementi di d. Come mai? Stampo il valore di p2 ad ogni iterazione ed è giustamente ogni volta diverso, però quando lo assegno a d me lo copia su tutti gli elementi di d. Ad esempio, se d[0]=p1, d[1]=p2 quando vado ad assegnare d[2]=p3 ho sia d[0] che d[1] uguali a p3.
Sicuramente mi sto perdendo in un bicchier d'acqua, però non riesco a uscirne. Grazie!!!