Estoy estudiando para mi prueba en C y estoy leyendo en un resumen en C que descargué de algún sitio. Está escrito que no está permitido escribir arr[i]
donde i
es una variable. La única forma de hacerlo es con malloc.
Sin embargo, me escribió el siguiente código y compila sin advertencias y sin error en valgrind:Declaración de una matriz con una variable de tamaño no constante
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, ¿qué es la verdad detrás de las declaraciones de matrices? ¡gracias!
Como advertencia: recomendaría no confiar demasiado en los resúmenes de C encontrados en Internet; Recientemente, pasé mucho tiempo revisando C y C++ en preparación para las entrevistas, y encontré que la mayoría de las "guías de estudio" de Internet tenían información inexacta o engañosa. Yo recomendaría [un buen libro introductorio] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list), con la advertencia de que a menudo tales libros no cubren C99 características porque se implementan menos comúnmente. –
Si bien son legales en C99, los VLA son * extremadamente * peligrosos a menos que ya tenga un límite muy pequeño en el valor de la expresión que se utilizará como tamaño de matriz. Pueden conducir fácilmente al desbordamiento de la pila (no del tipo bueno :-) y a la destrucción de la memoria del montón. –