Originariamente inviato da programfile
Quindi l'unico metodo è controllare e ricontrollare mille volte il codice perchè solo io (o cmq il programmatore) può controllare che tutto sia giusto comprese le dimensioni e i valori dell'array, altrimenti tutto mi si compila come se niente fosse. Giusto?
Perchè quando lo compilo con la dimensione sbagliata non è che mi restituisce un valore random, no, mi restituisce il valore che ho definito io anche se fuori dall'array!
Non necessariamente. Se poi scrivi nella memoria dove hai scritto questo valore in maniera "corretta" ti ritrovi un altro valore.
Quindi per questo problema è colpa del compilatore oppure è solamente il linguaggio che non controlla?
È undefined behavior definito a livello di linguaggio.

In ogni caso, in generale puoi utilizzare la classe template std::vector (parte della libreria standard) e usare il metodo at per accedere agli elementi, che controlla sempre l'indice passato.

In questo secondo caso quindi è solo colpa del compilatore? Se compilassi con altri programmi questi mi si rifiuterebbero di compilare ciò che ho scritto sopra?
No; tuttavia, se sfori un array in modo così palese da sforare anche dallo stack frame (sovrascrivendo l'indirizzo di ritorno) i compilatori moderni fanno sì che il tuo programma si arresti con un errore invece di andare avanti in uno stato incoerente (è una protezione contro gli attacchi di stack-smashing).
I programmi che mi citi sono gratis o a pagamento? (scusate l'ignoranza! )
Grazie mille per la risposta!!!
Sono entrambi gratis. Nota comunque che Code::Blocks e Dev-C++ sono due IDE diverse, il compilatore che ci sta sotto è lo stesso (MinGW, il porting per Windows di g++); tuttavia dato che Dev-C++ ha cessato lo sviluppo diversi anni fa ti ritrovi una versione piuttosto vecchia di MinGW, mentre con Code::Blocks hai le versioni più recenti.