Массивы в Си не проверяются во время выполнения. Другими словами, вы можете «определить» массив размера N и получить доступ к концу границы массива. Если вы выходите из конца массива, то вы удаляете память где-то в стеке (или в куче).
Как только вы где-то очистите память, ваша программа, вероятно, вылетит. Эти сбои может быть трудно отследить, потому что они могут сбои далеко от того места, где вы фактически перекрыли конец массива.
Обычно, когда вы объявляете массивы в C, лучше всего использовать некоторую константу или #define, чтобы отметить размер массива:
#define MAX_ELEMENTS 10
int array[MAX_ELEMENTS];
int cnt;
for(cnt = 0; cnt < MAX_ELEMENTS; cnt+=1) {
array[cnt] = cnt;
}
Если вы пропустите MAX_ELEMENTS в присваивании массива, вы можете перезаписать значение cnt. Вы можете перезаписать другую переменную. Все зависит от компилятора и структуры кода. Также обратите внимание на использование знака <в цикле for. Массивы C основаны на 0, поэтому вы должны проверять, используя значение меньше или меньше или меньше. </p>