Diferencia entre el tipo de matriz y la matriz asignada con malloc

Hoy estaba ayudando a un amigo mío con un código C, y encontré un comportamiento extraño que no pude explicarle por qué estaba sucediendo. Teníamos un archivo TSV con una lista de enteros, con un int en cada línea. La primera línea fue el número de líneas que tenía la lista.

También teníamos un archivo c con un "archivo de lectura" muy simple. La primera línea fue leída a n, el número de líneas, luego hubo una inicialización de:

<code>int list[n]
</code>

y finalmente un bucle for de n con un fscanf.

Para las pequeñas n (hasta ~ 100.000), todo estaba bien. Sin embargo, hemos encontrado que cuando n era grande (10 ^ 6), se producía una falla de seguridad.

Finalmente, cambiamos la inicialización de la lista a

<code>int *list = malloc(n*sizeof(int))
</code>

y todo cuando está bien, incluso con n muy grande.

¿Alguien puede explicar por qué ocurrió esto? ¿Qué estaba causando la falla de seguridad con la lista int [n], que se detuvo cuando comenzamos a usar list = malloc (n * sizeof (int))?

Respuestas a la pregunta(9)

Su respuesta a la pregunta