Программа должна компилироваться без ошибок, хотя, возможно, с предупреждениями. Полученный нами результат справедлив для компилятора gcc (использовалась версия 4.7.3).
Точкой входа в программу является адрес функции main
. Он необходим для компоновки программы. Однако компоновщик интересует только адрес связываемого объекта, а не его сущность. Поэтому, мы заменим функцию main
обычной глобальной переменной main
.
Итак, наша программа имеет вид:
int main=0; /* можно инициализировать любым значением */
Выполнение программы вызывает Segmentation fault
, потому что программа она выполнить main
так, как если бы это была функция. Но это невозможно, поскольку компилятор разместил main
в сегменте данных (доступном только для чтения/записи, но не для исполнения) как глобальную переменную.
Если тип глобальной переменной не указан, по умолчанию предполагается, что она имеет тип int. Воспользуемся этим для сокращения программы
main=0;
По умолчанию глобальным переменным присваиваются нулевые значения, что позволяет сделать программу еще короче
main;
Вот она -- кратчайшая программа, вызывающая ошибку во время выполнения.
Комментарии
comments powered by Disqus