Chiarimento matrice dinamica

Gianni911
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..
for(int i=0;i<n;i++){
         delete[]matt[i];
         delete[]matt;
         }


grazie.. :D

Risposte
apatriarca
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:
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)?

Gianni911
Grazie per la spiegazione... :smt023
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..

vict85
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).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.