Consideriamo il seguente esempio di allocazione dinamica tramite l'operatore new:
Come si può facilmente notare determino innanzitutto il numero delle lettere dell'alfabeto (n = 26) e alloco dinamicamente un vettore di char della stessa dimensione. Successivamente assegno, nella corrispondente posizione del vettore, le lettere stesse (secondo loop).codice:#include <iostream> using std::cout; using std::endl; int main() { unsigned n = 0; for( char c = 'a'; c <= 'z'; ++c ) ++n; char *character = new char [ n ]; for( char c = 'a'; c <= 'z'; ++c ) character[ c-'a' ] = c; delete [] character; getc(stdin); return 0; }
Dealloco il tutto con: delete [] character.
Tutto normale nessun problema.
Ma se io non conoscessi il valore esatto di n?
Mi spiego meglio il codice seguente...
codice:#include <iostream> using std::cout; using std::endl; int main() { unsigned n = 0; char *character = new char [ n ]; for( char c = 'a'; c <= 'z'; ++c ) character[ n++ ] = c; delete [] character; // ERRORE! getc(stdin); return 0; }
Perchè si verifica l'errore nell'heap della memoria in corrispondenza dell'operazione di deallocazione dinamica della memoria (eseguendo il debug nessun problema fino a quel punto)?
Grazie.