Declaración de una matriz con una variable de tamaño no constante [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿En qué compilador debo confiar? 4 respuestas

Estoy estudiando para mi examen en C y estoy leyendo un resumen en C que descargué de algún sitio. Está escrito que no está permitido escribirarr[i] dóndei es una variable La única forma de hacerlo es con malloc.
Sin embargo, escribí el siguiente código y se compila sin advertencias y sin error en valgrind:

int index = 5;
int a4[index];

a4[0] = 1;
a4[1] = 2;

int index2;
scanf("%d",&index2);
int a5[index2];
a5[0] = 1;
a5[1] = 2;

Entonces, ¿cuál es la verdad detrás de las declaraciones de matriz? ¡gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta