Originariamente inviato da Salvy95
E allora mi spieghi perchè sul dev c++ da problemi e sul code::blocks non da problemi?
Dipenderà dalle impostazioni con cui è stato compilato/dalla versione della CRT/da qualcos'altro ancora, probabilmente in un caso lo stack è "pulito" e dopo il buffer c'è della memoria inizializzata a 0, mentre nell'altro caso, o per chiamate interne alla CRT effettuate precedentemente o per qualche altro motivo, lo stack è "sporco" e ha su dei vecchi valori.
I compilatori spesso intervengono ad eliminare eventuali errori al codice
Cazzata. Il compilatore/la CRT semmai, in modalità debug, fa sì che gli errori siano più evidenti, ad esempio riempiendo le variabili e la memoria non inizializzate con pattern particolari e inusuali (come 0xCCCCCCCC), in modo che il programmatore se ne possa accorgere e li sistemi. Fare sì che un errore sia "invisibile" è la peggior cosa che un compilatore possa fare.
In effetti, tutti i meccanismi di sicurezza che ho visto inseriti dai compilatori per evitare gli stack overflow di default generano un crash del programma, in modo che il problema non passi inosservato.