Salve a tutti! Stavo facendo delle prove per allocare e reallocare dinamicamente una matrice... ma se eseguo il codice mi si blocca tutto.
Qualcuno saprebbe spiegarmi perchè?
Sicuramente sbaglio qualcosa, ma non riesco a trovare la soluzione...

Questo è il codice:

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

double** allocaMatrice(int righe, int colonne);
double** reAllocaMatrice(double **mat, int righe, int colonne);
void riempiMatrice(double **mat, int *righe, int *colonne);
void usaMatrice(double **mat, int righe, int colonne);


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

	mat = allocaMatrice(righe, colonne);

	riempiMatrice(mat, &righe, &colonne);
	usaMatrice(mat, righe, colonne);
	

	//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**)malloc(righe*(sizeof(double*)));
	if (mat == NULL){
		puts("Spazio insufficiente");
		exit(0);
	}

	for (i=0; i<righe; i++){
		mat[i] = (double*)malloc(colonne*sizeof(double));
		if (mat[i] == NULL){
			puts("Spazio insufficiente");
			exit(0);
		}
	}	
	
	return mat;
}

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

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

	for (i=0; i<righe; i++){
		mat[i] = (double*)realloc(mat, sizeof(double)*colonne);
		if (mat[i] == NULL){
			puts("Spazio insufficiente");
			exit(0);
		}
	}	
	
	return mat;
}

void riempiMatrice(double **mat, int *righe, int *colonne){
	int i, j;
	*righe = 5;
	*colonne = 6;
	
	mat = reAllocaMatrice(mat, *righe, *colonne);

	for(i=0; i<*righe; i++){
		for(j=0; j<*colonne; j++){
			mat[i][j] = 0.0;
		}
	}
}

void usaMatrice(double **mat, int righe, int colonne){
	int i, j;

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