Date Редакция Категория comp Теги C

Программа должна компилироваться без ошибок, хотя, возможно, с предупреждениями. Полученный нами результат справедлив для компилятора gcc (использовалась версия 4.7.3).

Точкой входа в программу является адрес функции main. Он необходим для компоновки программы. Однако компоновщик интересует только адрес связываемого объекта, а не его сущность. Поэтому, мы заменим функцию main обычной глобальной переменной main.

Итак, наша программа имеет вид:

int main=0; /* можно инициализировать любым значением */

Выполнение программы вызывает Segmentation fault, потому что программа она выполнить main так, как если бы это была функция. Но это невозможно, поскольку компилятор разместил main в сегменте данных (доступном только для чтения/записи, но не для исполнения) как глобальную переменную.

Если тип глобальной переменной не указан, по умолчанию предполагается, что она имеет тип int. Воспользуемся этим для сокращения программы

main=0;

По умолчанию глобальным переменным присваиваются нулевые значения, что позволяет сделать программу еще короче

main;

Вот она -- кратчайшая программа, вызывающая ошибку во время выполнения.



Комментарии

comments powered by Disqus