Corretto. Tieni presente che alla void function liberaMat() non hai bisogno di passare il puntatore per "riferimento": la free() non ne modifica il valore, si limita a deallocare l'area di memoria da esso puntata. Avrebbe senso passarlo per "riferimento" se facessi una cosa del genere:
cioè appunto se andassi a modificare il valore del puntatore (in realtà diventa necessario solo per l'ultima istruzione, per l'altra andrebbe bene anche il passaggio per copia). Peraltro l'annullamento di un puntatore dopo la free() è operazione consigliata per evitare che eventuali altre free() accidentali sullo stesso puntatore possano causare problemi, infatti lo standard prevede che la chiamata free(NULL) non abbia effetti:codice:void liberaMat(int ***m, int r) { int i; for(i=0; i<r; i++){ free((*m)[i]); (*m)[i] = NULL; } free(*m); *m = NULL; }
codice:The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs.

Rispondi quotando