Почему я не получаю «Ошибка сегментации»? [Дубликат]

Возможный дубликат:

Почему Дон'я получаю ошибку сегментации, когда пишу за пределами массива?

Этот код компилируется и запускается без ошибок. Но как? Я

#include 

int main (void)
{
    int foo[2];

    foo[8] = 4; /* How could this happen? */

    printf("%d\n", foo[8]);

    return 0;
}

м компилируется сGCC 4.7.2 на Arch Linux x86_64.

gcc -Wall -o "main" "main.c"
 R..04 нояб. 2012 г., 19:04
Почему Дон'Я получил ошибку сегментации? " редко (если вообще) действительный вопрос.
 alk04 нояб. 2012 г., 18:58
Да ты прав. Я как-то использовал неправильную формулировку. @EdS «.
 alk04 нояб. 2012 г., 18:55
Вы'просто повезло, что приложение нет
 Ed S.04 нояб. 2012 г., 18:56
@alk: Нет, крах - лучший результат. В самом деле.

Ответы на вопрос(3)

Пытаться

foo[1000000]=42; 

и посмотрим, что получится.

foo[8] могут быть выделены для вашей программы (например, для заполнения), принадлежать вашей операционной системе. С неопределенным поведением может произойти все что угодно; вам не повезло, потому что это работает.

Решение Вопроса

Потому что неопределенное поведение незначит "вы получите сегфоЭто было бы определенным поведением.

Позволять'Предполагаю, что выВы работаете в режиме отладки, и ваш компилятор заполняет пространство стека / локальной переменной. Вы'вероятно, просто записываю в какую-то неиспользуемую часть стекового пространства.

Создайте выпускную версию в понедельник, когда ваш компилятор чувствует себя не в своей тарелке, и теперь вы перезаписываете адрес возврата или код, который устанавливает вызов дляprintf, без разницы. К сожалению.

Только один возможный результат, но вы поняли идею.

 chris04 нояб. 2012 г., 18:58
Тот'я первый размы когда-либо слышали, что это так. +1 за это.

Ваш ответ на вопрос