Consideriamo il seguente esempio di allocazione dinamica tramite l'operatore new:
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;
}
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).
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.