Prima di tutto non ho capito perchè passi r e c come puntatori...visto che non li devi modificare passali per valore. Inoltre nel tuo codice chiami mat_dim con i soli r e c.
Altra cosa: nella mat_dim(int** mat, int* r, int* c) devi tener presente che mat è locale quindi se nella leggi la chiami così
codice:
int** m;
mat_dim(m, r, c);
m NON punterà alla matrice che hai allocato nella funzione e se ci tenti di accedere andrà in crash il programma. Se vuoi mantenere il tuo approccio devi fare così:
codice:
void mat_dim(int ***mat, int r, int c)
{
printf("%d %d\n", r, c);
int i=0;
*mat = (int**)malloc(sizeof(int*) * r);
while(i<r){
(*mat)[i]=(int*)malloc(sizeof(int) * c);
i++;
}
}
e chiamarla così;
codice:
int** m;
mat_dim(&m, r, c);
Però sarebbe tutto più semplice se tu creassi la matrice nella funzione e restituissi il suo puntatore:
codice:
int** mat_dim(int r, int c)
{
int i=0;
int** mat = (int**)malloc(sizeof(int*) * r);
while(i<r){
mat[i]=(int*)malloc(sizeof(int) * c);
i++;
}
return mat;
}
e la assegni al puntatore
codice:
int** m;
m = mat_dim(r, c);