Problema di segmentation fault

di il
1 risposte

Problema di segmentation fault

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!

1 Risposte

  • Re: Problema di segmentation fault

    Ciao,

    in questo pezzo
    
    for(i=1; i<n; i++)
    {
    if(A[i][i+1]<pow(10, -10)) //invece di pow usare un valore costante
    
    e anche in un successivo pezzo, il ciclo for inizia da 1 e va fino a 'n', mentre solitamente si comincia da 0. Inoltre nell'if vai a leggere la cella in posizione [i+1], ma alla fine del ciclo for quell'(i+1) è uguale a 'n' e di conseguenza vai a leggere fuori dalla tua matrice.
Devi accedere o registrarti per scrivere nel forum
1 risposte