Segmentation Fault nel prodotto matrici

di il
2 risposte

Segmentation Fault nel prodotto matrici

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");
	}
}

2 Risposte

  • Re: Segmentation Fault nel prodotto matrici

    Riesci ad individuare la linea o la funzione in cui accade?

    Ti posso solamente indicare qualche stranezza ... ad esempio nella funzione di stampa passi i limiti in m e n ma poi utilizzi M e N

    for(h=0; h<M; h++) {
    for(l=0; l<N; l++)
  • Re: Segmentation Fault nel prodotto matrici

    Oh mio Dio che svista ridicola... sistemato adesso funziona bene Grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte