Non necessariamente. Se poi scrivi nella memoria dove hai scritto questo valore in maniera "corretta" ti ritrovi un altro valore.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!
È undefined behavior definito a livello di linguaggio.Quindi per questo problema è colpa del compilatore oppure è solamente il linguaggio che non controlla?
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.
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).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?
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.I programmi che mi citi sono gratis o a pagamento? (scusate l'ignoranza!)
Grazie mille per la risposta!!!