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]);
}
}
}