Почему работает следующий код (printf()
) до i
достигает 14
? На самом деле выполнение должно завершиться неудачно, когда i
проходит мимо 10-го элемента массива, нет? Даже я пишу:Выполнение задания массива C за пределами задержек
for(i=0; i<100; i++)
Я все равно получаю ошибку сегментации, но все значения печатаются.
#include <stdio.h>
void funcX() {
int i;
int array[10];
printf("\tEntering funcX()\n");
//for(i=0; i<11; i++) { //This works
//for(i=0; i<12; i++) { //This works
//for(i=0; i<13; i++) { //This works
for(i=0; i<14; i++) { //***This fails****
array[i]=i;
printf("array[i]= %d\n", array[i]);
}
printf("\tLeaving funcX()\n");
}
int main(int argc, char** argv) {
printf("Calling funcX() from main()\n");
funcX();
printf("Returning from funcX()\n");
return(0);
}
Составлено на RH Linux с использованием gcc -m32
.
Почему вы это делаете? – haccks
Это просто сработает. Запись в нераспределенную память - это неопределенное поведение. В конце концов, вы попали в проблему, и она сработала. Вы не можете полагаться на него, работая вне выделенной памяти; это просто случайность, основанная на текущем состоянии вашей машины. –
Очень похоже на [Доступ к глобальному массиву за пределами связанного неопределенного поведения?] (Http://stackoverflow.com/q/26426910/1708801) ... ваш ответ есть, разница - глобальный массив Vs automatic one, но по существу, то же самое. –