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

Rispondi quotando
Si imparano sempre cose nuove...