grazie per la risposta, ma non capisco perchè dovrebbe essere sbagliato...
ho cercato un pò e ho visto che per allocare dinamicamente una matrice si fa così, inoltre questo codice funziona:

codice:
#include <stdio.h>
#include <stdlib.h>

double** allocaMatrice(int righe, int colonne);

void main(){
	double **mat;
	int i, j;
	int righe = 2;
	int colonne = 2;

	mat = allocaMatrice(righe, colonne);

	for(i=0; i<righe; i++){
		for(j=0; j<colonne; j++){
			mat[i][j] = 0.0;
		}
	}
	
	for(i=0; i<righe; i++){
		printf("\n");
		for(j=0; j<colonne; j++){
			printf("%d", mat[i][j]);
		}
	}

	//dealloco matrice
	for(i=0; i<colonne; i++){
		free(mat[i]);
	}
	free(mat);
}


double** allocaMatrice(int righe, int colonne){
	int i;
	double **mat;

	mat = (double**)calloc(righe,sizeof(double*));
	if (mat == NULL){
		puts("Spazio insufficiente");
		exit(0);
	}

	for (i=0; i<righe; i++){
		mat[i] = (double*)calloc(colonne,sizeof(double));
		if (mat[i] == NULL){
			puts("Spazio insufficiente");
			exit(0);
		}
	}	
	
	return mat;
}
il problema nasce quando cerco di reallocare la matrice...