¿Por qué el comstackdor no me advierte sobre un error obvio?

Entonces, acabo de estudiar el material de Arrays y tengo un problema …
Obtuve este siguiente código:

int a[5]; int i; for(i=0; i<=10; i++) { scanf("%d", &a[i]); } 

Declaré en una matriz que su longitud es 5.
Luego, ejecuté un bucle for de 0 a 10 que inserta números en a[i] .
Usé esta tabla (que creé) para entender lo que sucedió durante el tiempo de ejecución:

¿Ves la flecha roja? Ahí es donde el bucle se detiene, porque a[] no puede incluir más de 5 valores. Lo que significa, que a[6] no existe.
Aun así, sigue pidiendo números y guardándolos en la matriz.

Una cosa más, actualmente estoy usando el comstackdor Dev C ++ .

¿Alguien tiene una idea de por qué está sucediendo?
¡Gracias!

C no tiene ningún estándar en restricción en el índice de matriz fuera de la comprobación de límites.

Eso significa que los progtwigs son libres de violar la regla del índice. Depende de los progtwigdores verificar la restricción del índice de matriz.

Y, eso resultará en un comportamiento indefinido.

Este error no tiene nada que ver con el comstackdor. Ya sea C o Java, siempre que no viole la syntax del lenguaje y la semántica, el código se comstackrá.

Lo que tienes es un error lógico que podría ser detectado por el entorno de tiempo de ejecución del lenguaje, por ejemplo, JVM, que carece de C.

Lo que estás haciendo aquí se llama comportamiento indefinido . No mostrará un error cuando vaya más allá del índice de una matriz.

Esto significa que el comportamiento que mostrará su código no se puede definir.


En una nota al margen, me gustaría agregar algo que leí en algún lugar. Tenga en cuenta que esto es solo algo que leí, puede ser incorrecto, pero tiene sentido. En C , algunos comportamientos no se convierten en errores, porque C cree que los progtwigdores son lo suficientemente inteligentes como para no cometer errores como este.

C no realiza la comprobación de los límites de la matriz.

C no realiza ninguna comprobación de límites en los accesos de matriz (es decir, el comstackdor no inyectará ningún código que arrojará una excepción si intenta acceder a un elemento fuera de los límites de la matriz). El estándar de idioma no define lo que debería suceder si accede a elementos fuera de los límites de la matriz; básicamente, anulas la garantía de tu código cuando haces eso.

El resultado puede incluir cualquier cosa, desde la ejecución hasta la finalización sin errores aparentes, el lanzamiento de una falla de seguridad, el desencadenamiento de una rutina de malware, etc. Una vez más, la definición de idioma no exige ningún comportamiento particular para tal error.

Recuerda que C es un producto de principios de los 70; los controles de límites lo hacen más lento, y la filosofía de C es que el progtwigdor está en la mejor posición para saber si un control de límites es realmente necesario o no. El comstackdor asume que sabes cuán grande es tu matriz, y que sabes que no debes intentar leer o escribir más allá del final de la misma.