Salve. Come si evince dal titolo, vorrei proporvi un codice che ho scritto e che sembra essere funzionante, ma ho alcuni dubbi. Intanto posto il codice:
/*ELIMINAZIONE ULTIMA RIGA */
#include <stdio.h>
#include <stdlib.h>
int main() {
int **mat,i,j,r,c; //dichiarazione variabili
printf("\nInserire dimensione righe matrice: "); // inserimento righe
scanf("%d",&r);
printf("\nInserire dimensione colonne matrice: "); // inserimento colonne
scanf("%d",&c);
/*ALLOCAZIONE DINAMICA*/
mat=(int**)malloc(sizeof(int *)*r); //alloco memoria per le righe
for(j=0;j<c;j++){
mat[j]=(int*)malloc(sizeof(int)*c); //alloco memoria per le colonne
}
/*INSERIMENTO E STAMPA DELLA MATRICE COMPLETA*/
for(i=0;i<r;i++){
for(j=0;j<c;j++){
printf("\nInserire elemento [%d][%d]", i+1,j+1);
scanf("%d",&mat[i][j]);
}
}
for(i=0;i<r;i++){
printf("\n");
for(j=0;j<c;j++){
printf("%5d", mat[i][j]);
}
}
/*ELIMINO L'ULTIMA RIGA - Pongo tutti gli elementi dell'ultima riga pari a 0, dopodichè riduco la dimensione delle righe di un'unita e dealloco dalla memoria l'ultima riga (passaggio dubbio)*/
for(i=r-1,j=0;j<c;j++){
mat[i][j]=0;
}
r--;
free(mat[r]);
/*STAMPO LA MATRICE SENZA L'ULTIMA RIGA*/
printf("\n\n\nMatrice senza ultima riga:\n\n");
for(i=0;i<r;i++){
printf("\n");
for ( j = 0; j <c ; j++) {
printf("%5d",mat[i][j]);
}
}
}
Il codice è così strutturato:
- Dichiarazione della matrice come doppio puntatore ad int (voglio allocarla dinamicamente) e dichiarazione delle variabili r,c(righe,colonne) e degli indici i,j(scorrono gli elementi della matrice);
-Inserisco la dimensione delle righe e delle colonne e le salvo rispettivamente con 2 scanf;
-Alloco dinamicamente la matrice, allocando prima un array da "r" puntatori ad int e per ogni puntatore gli alloco un array di int di lunghezza "c";
-Stampo la matrice iniziale (completa);
-Inizio il processo di eliminazione della riga (l'ultima in questo caso) e dopo vado a deallocare la riga eliminata dalla memoria.
-Stampa della matrice rielaborata;
Il tutto funziona, ma ho un dubbio: ha senso deallocare l'ultima riga (o qualsiasi riga eliminata)? E va bene la sitassi
free(mat[r])
per deallocare la singola riga?
Grazie anticipatamente risolverà questi miei dubbi.