2015-01-26 3 views
0

Почему работает следующий код (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.

+2

Почему вы это делаете? – haccks

+1

Это просто сработает. Запись в нераспределенную память - это неопределенное поведение. В конце концов, вы попали в проблему, и она сработала. Вы не можете полагаться на него, работая вне выделенной памяти; это просто случайность, основанная на текущем состоянии вашей машины. –

+0

Очень похоже на [Доступ к глобальному массиву за пределами связанного неопределенного поведения?] (Http://stackoverflow.com/q/26426910/1708801) ... ваш ответ есть, разница - глобальный массив Vs automatic one, но по существу, то же самое. –

ответ

3

на выполнение

for(i=0; i<14; i++) { 

и значение i равной 10, вы столкнулись undefined behavior путем доступа вне связанной памяти [array[i]], результатом которой является, ну, не определено. Одним из побочных эффектов является ошибка сегментации. Это не должен.

+0

В 'array [13] есть что-то особенное, вызывающее ошибку сегментации. –

Смежные вопросы