Напишите программу, которая выдает ошибку StackOverflow или эквивалентную информацию на используемом языке. Например, в java программа должна скинуть java.lang.StackOverflowError
.
Вам не разрешено определять функцию, которая вызывает себя или новый класс (кроме той, что содержится main
в Java). Следует использовать классы выбранного языка программирования.
И это не должно бросать ошибку явно.
def s{def t=s;t}
?Ответы:
Befunge, 1
Я не знаю Befunge, но ...
из стека переполнения кода гольф
источник
@
чтобы завершить программу.Python (2.7.3), 35 символов
Эта операция сама по себе успешна, но как
RuntimeError: 'maximum recursion depth exceeded'
следствие , и сценарий, и интерактив будут сразу же выброшены .Вдохновлен ответом Эльссара.
источник
Coq
70000
это просто синтаксический сахар дляS (S ( ... (S O) ...))
70000S
-х годов. Я думаю, что это проверка типов, которая вызывает переполнение стека.Вот предупреждение, которое выводится перед выполнением команды:
источник
Ява - 35
источник
public static void main
там. Или я просто не понимаю Java?Javascript 24 символа
Ответ, зависящий от браузера (должен иметь доступ
apply
):eval
было самое короткое имя глобальной функции, которое я мог найти (кто-нибудь знает одну, которая короче?)apply
позволяет нам преобразовывать массив в параметры функции, причем первый параметр является контекстом функции (this
)Array(999999)
создаст массив с указанной длиной. Не уверен, что максимальное количество аргументов, но это меньше, чем это, и больше, чем99999
IE9:
Chrome 24:
FireFox 18
Примечание. Из-за однопоточной природы javascript бесконечные циклы блокируют пользовательский интерфейс и никогда не вызывают исключение.
Ни один из них не подходит.
Обновление - это сбривает три символа:
источник
eval
это самый короткий.eval.apply(0,Array(1e6))
экономит 3 символа, вы даже можете использовать их9e9
бесплатноapply
стандартная функция ECMAScript Нет ничего зависящего от браузера. Если вы не говорите о действительно старых браузерах, но вapply
любом случае это не будет работать в гипотетическом Netscape 2 , потому чтоArray
класс не существует в Netscape 2.eval(...Array(9e9))
dir.apply(0,Array(1e7));
Python 2.7 (12 символов)
приводит к «переполнению стека парсера»
источник
SyntaxError: unexpected EOF while parsing
exec('{'*101)
я получаюMemoryError
exec
это утверждение, так что вы можете просто использоватьexec'{'*999
(99, кажется, недостаточно)Mathematica, 4 символа
источник
Clojure, 12 символов
Бег в репле:
источник
(\x.xx)(\x.xx)
, но я недостаточно хорошо знаю clojure, чтобы точно сказать, происходит ли это так. Я также не понимаю, почему вышеупомянутое выражение может привести к переполнению стека, поэтому, возможно, вы делаете какую-то хитрость с Y-комбинатором? Этот ответ меня интересует, и объяснение было бы неплохо.Java - 113 символов
Я думаю, что это соответствует духу правила «не называть себя». Он не делает это явно, и даже проходит через конструкцию языка Java.
Сжатая версия:
источник
""+this
на самом деле""+this.toString()
, так метод вызывает сам себя.StringBuilder
туда объект.toString
скорее всего будет вызван изнутри.toString()
метод в конечном итоге будетpublic java.lang.String toString() { return this.toString(); }
C 19 байтов
источник
main.c:1:16: error: size of array 'i' is negative
мне на GCC 4.8.1. Версия без подписиmain(){int i[~0U];}
работает.sizeof(i)
16 ГБ. Имеет ли значение использованиеul
илиull
суффикс? Некоторые системы перегружают память и дают сбой, только если в нее записана память.GolfScript (8 символов)
Результат:
В основном это создает сильно вложенную структуру данных, а затем переполняет стек при попытке превратить его в строку.
источник
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333
и оно сломается.333
Это было наименьшее значение, которое мне не понравилось, но если у вас другая версия Ruby (или, может быть, та же версия в другой ОС, насколько я знаю), она может обработать другое количество стековых кадров перед переполнением.6.?
все равно работает без добавления символов.сборка x86, синтаксис NASM, 7 байтов
"Pëý" - 50 EB FD в шестнадцатеричном формате, и
в сборке х86.
источник
Руби, 12
дает
Предположительно, зависит от системы, но вы можете добавить порядки, увеличив последнюю цифру (не рекомендуется).
Редактировать для объяснения: Подобно некоторым другим примерам, это создает строку
[][][]
..., повторенную 9000 раз, затем оценивает ее: самый правый[]
анализируется как вызов функции для остальных и так далее. Если бы он действительно попал в начало, он бы выдал ArgumentError, потому что[]
это объект с[]
методом, который требует один аргумент, но моя машина выдает ошибку немного, прежде чем размер стека превысит девять тысяч.источник
ruby
1.9.2 выдает «ArgumentError: неверное количество аргументов (0 для 1..2)».ruby
1.8.7. Там размещенный код работает, как описано.def f;f;end;f
Реболь (11 символов)
Урожайность:
Хотя у Rebol есть функции, замыкания и объекты ... это не определяет ни одного из них. Он определяет структуру данных, которая в парадигме код-как-данные может рассматриваться как код с использованием DO.
Мы можем исследовать вопрос «что такое S» с REPL:
DO никогда не превращает это в функцию, он вызывает оценщик в текущей среде структуры.
источник
C, 35 символов
источник
alloca(1)
это в основном перевод,sub $1, %esp
поэтому стек не затрагивается.Common Lisp, 7 символов
источник
#1=(#1#)
для терминала и(print #1=(#1#))
, но ваше решение намного лучше.Питон - 11 символов
источник
Casio Calculator, 11 клавиш
В этом «языке» довольно сложно сосчитать байты / токены - я указал требуемое количество нажатий клавиш, за исключением Shift, Alpha (вторая клавиша Shift) и
=
в конце - это, безусловно, укладывается в 1 байт на нажатие клавиши.Протестировано на модели fx-85GT PLUS , которая представляет собой стандартный не программируемый «непрограммируемый» научный калькулятор. Другие модели будут работать.
Просто сложите 11 кубических корней:
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
Это даже не дает синтаксической ошибки о пропущенном числе под квадратным корнем.
Это не похоже на квадратные корни.
Как вариант, повторите cos(31 раз.
Выход
Я считаю, что это квалифицируется как переполнение стека. Стек кажется крошечным ...
источник
(((((((((((((((((((((((((
FORTH, 13 байтов
переполняет стек значений
источник
: X X ; X
(9) должен переполнить возвращаемый стек:
...;
определение слова. Это добавляет как минимум 6 символов, плюс еще как минимум 2 для выполнения этой программы. Вы могли бы быть в состоянии сделать это короче, но вот пример:: F BEGIN 1 AGAIN ; F
. Я предлагаю это, потому что вопрос задает: «Написать программу». В любом случае, дал вам голосование за Форт, независимо от количества символов! :-)Постскриптум, 7
Например.
источник
Haskell (GHC, без оптимизации), 25
сумма ленивая в общем. Это накапливает кучу блоков, а затем пытается оценить их все в конце, что приводит к переполнению стека.
источник
Латекс: 8 символов
Это тот же код, который используется в этом ответе . По существу,
\end
макро расширяет себя многократно, в результате чего переполнение стека:TeX capacity exceeded, sorry [input stack size=5000]
. Более подробное объяснение можно найти здесь .источник
PHP 5.4, 33 символа
Это вызывает переполнение стека, когда вложенные объекты stdClass автоматически уничтожаются:
источник
Q / K (16 символов)
Не уверен, что это в духе задачи, но я не думаю, что это нарушает правила:
источник
Связка в том же стиле:
Python, 30
Javascript, 38
Луа, 44
источник
x=lambda y:y(y);x(x)
короче (20 символов). Эта функция не является рекурсивной. x вызывает любую функцию, переданную ему в качестве аргумента.->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
C #:
106865846322832 : добытчики могут ТАК легко ваша машина в C #:
источник
public int a {get{return a;}}
int a { get { return a; } }
INTERCAL, 12 байт
Объяснение:
NEXT
является версией вызова подпрограммы INTERCAL (или, по крайней мере, ближайшей, которую вы можете получить). Он помещает текущую позицию вNEXT
стек и переходит к данной метке.Однако, если
NEXT
длина стека превышает 80, вы получите то, что в значительной степени является INTERCAL-версией переполнения стека:Попробуйте это на Ideone. ,
источник
Морнингтон Полумесяц,
139133источник
Сборка X86 (AT & T), 33 символа
Обратите внимание, что хотя я использую метку
main
в качестве цели перехода, это не рекурсивная функция.источник
dd 0fdeb60
10 символов!Python (17):
источник
KeyError: 'unknown symbol table entry'