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.