Programma in C....aiutatemi a capire(risolto)

fk16
Ragzzi ho svolto questo esercizio, il compilatore compila, però non appena inserisco la lunghezza dell'array mi dà errore e smette di funzionare. Potete aiutarmi a capire cosa sbaglio??? Perchè non trovo l'errore:

/*Scrivere il codice di una funzione C che restituisca 
in un vettore di double il valore medio delle colonne di una matrice di double.
Sia il vettore che la matrice dovranno essere passati 
come argomento alla funzione.*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void riempi(double **mat, int *n, int *m);
void stampa(double **mat, int *n, int *m);
double *medio(double **mat, double *vet, int *n, int *m);
void sta_vet(double *vet, int *lun);

int main(){
	double **mat;
	double *vet;
	int n,m, lun;
	printf("Inserire il numero di righe\n");
	scanf("%d", &n);
	printf("Inserire il numero di colonne\n");
	scanf("%d", &m);
    mat =(double **)calloc(100,sizeof(double));
	printf("Inserire la lunghezza dell'array\n");
	scanf("%d", &lun);
	riempi(mat,&n,&m);
	stampa(mat,&n,&m);
	vet =(double *)calloc(lun,sizeof(double));
	vet = medio(mat,vet,&n,&m);
	sta_vet(vet,&lun);
	free(mat);
	free(vet);
	system("pause");
	return 0;
}

void riempi(double **mat, int *n, int *m){
	 int i,j;
	 srand(time(NULL));
	 for(i=0; i<*n; ++i)
	 for(j=0; j<*m; ++j){
	 		  mat[i][j] = (rand() % 10) + 0;
			  }
			  return;
			  }
			  
void stampa(double **mat, int *n, int *m){
	 int i,j;
	 for(i=0; i<*n; ++i){
	 for(j=0; j<*m; ++j){
	 		  printf("[%lf] ", mat[i][j]);
			  }
			  printf("\n");
			  }
			  return;
			  }

double *medio(double **mat, double *vet, int *n, int *m){
	   int i,j;
	   double media;
	   double sum = 0.0;
	   for(j=0; i<*m; ++j){
	   			for(i=0; i<*n; ++i){
						 sum += mat[i][j];
						 media = sum/(*m);
						 }
						 vet[j] = media;
						 }
	   return vet;
	   }

void sta_vet(double *vet, int *lun){
	 int i;
	 for(i=0; i<*lun; ++i)
	 printf("[%lf] ", vet[i]);
	 return;
	 }

Risposte
apatriarca
Per prima cosa inserisci il codice tra tag code in modo da renderlo più leggibile. Per questa volta l'ho fatto io. Allochi l'array senza considerare la dimensione che viene passata dall'utente. E' solitamente una pessima idea.

fk16
scusa per il tag code.....comunque ho risolto il problema dell'allocazione proprio ora....però ho trovato un altro errore...nella funzione *medio è come se non mi facesse la somma e di conseguenza la media ......come mai secondo te? a me il codice sembra giusto....

fk16
apposto ho risolto pure questo problema....grazie comunque dell'aiuto...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.