salve a tutti

ho un piccolissimo problemino, sta facendo un programma con un mai iniziale che si richiama una funzione
"void carica_immagine_in_A( double **A, int *n, int *m, int *p, double **h)"
dove A e h sono array, sono doppi puntatori in quanto devono ritornarmi nel main. Fin qui tutto bene. Posto il codice così si capisce meglio

codice:
 /*funzione che carica l'immagine nell'array A*/
void carica_immagine_in_A(double **A, int *n, int *m, int *p, double **h)
{

/*dichiarazione delle variabili*/
FILE *fp;
int N,M,j,z,i;


if((fp=fopen("dati5","r"))==NULL)

	{

	printf("Errore nell'aprire il file %s","dati5");

	exit(1);

	}



fscanf(fp, "%d\n",&(*n));

fscanf(fp, "%d\n",&(*m));

fscanf(fp, "%d\n",&(*p));


M=2*(*m);
*h=(double*)calloc(M,sizeof(double));


/*controllo se è posibile allocare h*/
if(*h==NULL){
	printf("Memoria insufficiente per allocare il vettore dei filtri");
	exit(1);
}


for(j=0;j<M;j++)

 {

 fscanf(fp,"%lf",&(*h[j]));
 printf("\nj= %d ",j);	

 printf("h[%d]=%lf\n",j,*h[j]);	

 }
}
il problema è quando lo eseguo, quando legge il vettore h dopo un paio di passi fa "segmentation fault"
M la vede e mi dice anche quanto è. L'array lo alloca. Non riesco a capuire dove sta il problema.
Help me