Salve a tutti, durante l'esecuzione del programma, che ho scritto per questo esercizio, ricevo un errore di segmentazione che non riesco a spiegarmi
/*
Creare un programma che allochi tre matrici di double. Le matrici A e C siano allocate con
dimensioni pari a MxN, la matrice B sia di dimensione NxN. Si inizializzi la matrice A con
valori pseudo casuali tra 0.0 e 1.0. La matrice B sia inizializzata come matrice Identità.
Verificare che la matrice C ottenuta moltiplicando A per B sia approssimabile alla matrice A stessa.
*/
#include <stdio.h>
#include <stdlib.h>
#define M 6
#define N 5
double stampa_mat(double **, int m, int n);
double **alloca_mat(double m, double n);
int main ()
{
int i, j, c, g, h, l, k;
double **A, **C;
double **B;
A=alloca_mat(M, N);
B=alloca_mat(N, N);
C=alloca_mat(M, N);
for(i=0; i<M; i++)
for(j=0; j<N; j++)
A[i][j]=rand()%101/100.0;
stampa_mat(A, M, N);
puts("\n");
for(c=0; c<N; c++) {
for(g=0; g<N; g++) {
if(c==g)
B[c][g]=1.0;
else
B[c][g]=0.0;
}
}
stampa_mat(B, N, N);
for(h=0; h<M; h++) {
for(l=0; l<N; l++) {
for(k=0; k<N; k++) {
C[h][l]+=A[h][k]*B[k][l];
}
}
}
stampa_mat(C, M, N);
}
double **alloca_mat(double m, double n)
{
double **my_mat;
int i;
my_mat=(double **)malloc(sizeof(double *)*m);
for(i=0; i<m; i++)
my_mat[i]=(double *)malloc(n*sizeof(double));
return my_mat;
}
double stampa_mat(double **v, int m, int n){
int h, l;
for(h=0; h<M; h++) {
for(l=0; l<N; l++)
printf("%lf ", v[h][l]);
printf("\n");
}
}