Quanto è pericoloso accedere a un array al di fuori dei suoi limiti (in C)? A volte può capitare di leggere dall'esterno dell'array (ora capisco di accedere alla memoria utilizzata da alcune altre parti del mio programma o anche oltre) o sto cercando di impostare un valore su un indice esterno all'array. Il programma a volte si arresta in modo anomalo, ma a volte viene eseguito, dando solo risultati inaspettati.
Ora quello che vorrei sapere è, quanto è davvero pericoloso? Se danneggia il mio programma, non è poi così male. Se d'altra parte si rompe qualcosa al di fuori del mio programma, perché in qualche modo sono riuscito ad accedere ad una memoria totalmente non correlata, allora è molto male, immagino. Ho letto un sacco di "tutto può succedere", "la segmentazione potrebbe essere il problema meno grave" , "il tuo disco rigido potrebbe diventare rosa e gli unicorni potrebbero cantare sotto la tua finestra", il che è bello, ma qual è davvero il pericolo?
Le mie domande:
- La lettura di valori esterni all'array può danneggiare qualcosa di diverso dal mio programma? Immagino che solo guardare le cose non cambi nulla, o cambierebbe, ad esempio, l'attributo "ultima apertura" di un file che mi è capitato di raggiungere?
- L'impostazione di valori fuori dall'array può danneggiare qualcosa di diverso dal mio programma? Da questa domanda Stack Overflow ho capito che è possibile accedere a qualsiasi posizione di memoria, che non esiste alcuna garanzia di sicurezza.
- Ora eseguo i miei piccoli programmi da XCode. Ciò fornisce una protezione aggiuntiva attorno al mio programma in cui non può raggiungere al di fuori della propria memoria? Può danneggiare XCode?
- Qualche consiglio su come eseguire il mio codice intrinsecamente difettoso in modo sicuro?
Uso OSX 10.7, Xcode 4.6.