Salve a tutti,
volevo condividere con voi questo problema che ho nel creare un programma, sperando che possiate aiutarmi a risolverlo.
Il programma in questione serve per diagonalizzare matrici simmetriche. Ad un certo punto del programma, dopo che la matrice data in input è stata tridiagonalizzata, mi serve sapere da quanti blocchi è costituita tale matrice, e da dove parte e dove finisce ogni blocco. Per far ciò ho preparato la funzione find_blocks, che ora vi riporto:
void find_blocks(double **A, int n, int *n_of_blocks, int *estremi)
{
int i, j;
//*n_of_blocks=1;
for(i=1; i<n; i++)
{
if(A[i+1]<pow(10, -10)) //invece di pow usare un valore costante
(*n_of_blocks)++;
}
printf("\n %d",*n_of_blocks);
estremi=calloc((*n_of_blocks)+1, sizeof(int));
printf("\n %d",*n_of_blocks);
estremi[0]=0;
for(i=1, j=1; i<n; i++)
{
if(A[i+1]==0)
{
estremi[j]=i;
j++;
}
}
printf("\n j %d", j);
printf("\n %d",*n_of_blocks);
estremi[*n_of_blocks]=n;
printf("\n fine find%d",*n_of_blocks);
//return;
}
Ora, quando provo a far girare il programma, arrivato a questa funzione
...
printf("\n %d ",n_of_blocks);
find_blocks(A, n, &n_of_blocks, estremi); /*---BISOGNA CONTARE E CLASSIFICARE I BLOCCHI---*/
printf("\n %d ",n_of_blocks);
printf("\n %d \n %d \n", estremi[0], estremi[1]);
...
va in segmentation fault, e non riesco a capire perchè.
Spero di essere stato chiaro, altrimenti sono lieto di fornirvi ulteriori dettagli. Grazie in anticipo!