Chiarimento matrice dinamica
Ciao a tutti qualcuno potrebbe spiegarmi ,il processo di cancellazione di una matrice dinamica??
In particolare vorrei sapere di preciso,cosa fanno quelle due istruzioni all'interno del for..
grazie..
In particolare vorrei sapere di preciso,cosa fanno quelle due istruzioni all'interno del for..
for(int i=0;i<n;i++){ delete[]matt[i]; delete[]matt; }
grazie..

Risposte
Ma chi ha scritto quel codice? È completamente sbagliato! Devi infatti deallocare la memoria a cui punta matt solo dopo aver deallocato la memoria a cui puntano i matt per ogni i. Facendo in quel modo, alla seconda iterazione del ciclo si accedere ad una locazione di memoria che è già stata deallocata con tutte le possibili conseguenze (negative) a cui porta. Il metodo corretto è quello di
1. deallocare tutte le righe della matrice;
2. deallocare l'array dei puntatori alle righe della matrice.
In altre parole il codice corretto è il seguente:
Ma che cosa hai capito delle matrici allocate in questo modo (metodo che personalmente sconsiglio vivamente e che credo serva solo ad insegnare l'uso dei puntatori e dell'allocazione della memoria)?
1. deallocare tutte le righe della matrice;
2. deallocare l'array dei puntatori alle righe della matrice.
In altre parole il codice corretto è il seguente:
for (int i = 0; i < n; ++i) { delete[] matt[i]; } delete[] matt;
Ma che cosa hai capito delle matrici allocate in questo modo (metodo che personalmente sconsiglio vivamente e che credo serva solo ad insegnare l'uso dei puntatori e dell'allocazione della memoria)?
Grazie per la spiegazione...
tornando al codice,solitamente utilizzo il codice scritto da te,ma non so perchè ,funziona anche in questo modo...
ps:questo é il codice per il distruttore della mia classe..

tornando al codice,solitamente utilizzo il codice scritto da te,ma non so perchè ,funziona anche in questo modo...
ps:questo é il codice per il distruttore della mia classe..
E' più pratico e porta con se meno errori se allochi un matrice in array e utilizzi una funzione per accedere all'elemento giusto (o anche usare l'overload dell'operatore parentesi).