Las matrices en C no se verifican en el tiempo de ejecución. En otras palabras, puede "definir" una matriz de tamaño N y acceder alegremente al final del límite de la matriz. Si sale del extremo de la matriz, destruirá la memoria en algún lugar de la pila (o del montón).
Una vez que basura la memoria en alguna parte, su programa es probable que se bloquee. Estos bloqueos pueden ser difíciles de rastrear, ya que pueden bloquearse lejos de donde realmente se pasó el final de la matriz.
Normalmente cuando se declara matrices en C, lo mejor es utilizar algún tipo de constante o #define para marcar el tamaño de la matriz:
#define MAX_ELEMENTS 10
int array[MAX_ELEMENTS];
int cnt;
for(cnt = 0; cnt < MAX_ELEMENTS; cnt+=1) {
array[cnt] = cnt;
}
Si se pasa de max_elements en la asignación de matrices, es posible que sobrescribe el valor de cnt.Puede sobrescribir alguna otra variable. Todo depende del compilador y la estructura del código. También tenga en cuenta el uso del signo < en el ciclo for. Las matrices en C están basadas en 0, por lo que debe verificar utilizando menos que y no menos que o igual.
+1 para la defensa del demonio nasal! – RBerteig
@RBerteig: No creo que "defenestración" (la defensa no es una palabra) significa lo que piensas que significa. En inglés, ese sería el acto de arrojar a alguien/algo a través de una ventana. http://en.wikipedia.org/wiki/Defenestration –
Un error tipográfico, de hecho, pero la elección de la palabra fue deliberada. Estaba buscando algo que aliterara con "demonio" que tenía la cantidad correcta de una sensación de expulsión inesperada. Fue un tramo, y posiblemente más allá del punto de ruptura de la metáfora ;-) – RBerteig