Escreva um programa que gere um erro StackOverflow ou o equivalente no idioma usado. Por exemplo, em java , o programa deve lançar java.lang.StackOverflowError
.
Você não tem permissão para definir uma função que se chama ou uma nova classe (exceto a que contém main
em java). Deve usar as classes da linguagem de programação selecionada.
E não deve lançar o erro explicitamente.
def s{def t=s;t}
?Respostas:
Befunge, 1
Eu não conheço Befunge, mas ...
Stack overflow code golf
fonte
@
para finalizar o programa.Python (2.7.3), 35 caracteres
Essa operação em si é bem-sucedida, mas tanto o script quanto o interativo serão lançados imediatamente
RuntimeError: 'maximum recursion depth exceeded'
como consequência.Inspirado pela resposta de elssar.
fonte
Coq
70000
é apenas açúcar sintático paraS (S ( ... (S O) ...))
com 70000S
's. Eu acho que é o verificador de tipos que causa o estouro da pilha.Aqui está um aviso impresso antes da execução do comando:
fonte
Java - 35
fonte
public static void main
lá dentro. Ou estou apenas falhando em entender Java?Javascript 24 caracteres
Resposta dependente do navegador (deve ter acesso a
apply
):eval
foi o nome de função global mais curto que eu pude encontrar (alguém sabe de um que seja mais curto?)apply
nos permite converter uma matriz em parâmetros de função, o primeiro parâmetro sendo o contexto da função (this
)Array(999999)
criará uma matriz com o comprimento listado. Não tenho certeza qual é o número máximo de argumentos, mas é menor que isso e mais que99999
IE9:
Chrome 24:
FireFox 18
Nota - Devido à natureza de thread único do javascript, loops infinitos acabam bloqueando a interface do usuário e nunca lançando uma exceção.
Nenhum deles se qualifica.
Atualização - reduz três caracteres:
fonte
eval
é o mais curto.eval.apply(0,Array(1e6))
economiza 3 caracteres, você pode ir9e9
sem custoapply
é um recurso padrão do ECMAScript. Não há nada dependente do navegador. A menos que você esteja falando de navegadores realmente antigos, mas isso não funcionaria no hipotético Netscape 2 deapply
qualquer maneira, porque aArray
classe não existe no Netscape 2.eval(...Array(9e9))
dir.apply(0,Array(1e7));
Python 2.7 (12 caracteres)
resulta em um «s_push: estouro de pilha do analisador»
fonte
SyntaxError: unexpected EOF while parsing
exec('{'*101)
eu receboMemoryError
exec
é uma afirmação, então você pode apenas usarexec'{'*999
(99 parece não ser suficiente)Mathematica, 4 caracteres
fonte
Clojure, 12 caracteres
Executando na repl:
fonte
(\x.xx)(\x.xx)
, mas não conheço o clojure o suficiente para ter certeza se é isso que está acontecendo. Também não vejo por que a expressão mencionada resultaria em um estouro de pilha, então talvez você esteja fazendo alguns truques com o combinador Y? Esta resposta me interessa e uma explicação seria legal.Java - 113 caracteres
Eu acho que isso permanece dentro do espírito da regra "sem métodos de auto-chamada". Ele não faz isso explicitamente e ainda passa por uma construção da linguagem Java.
Versão condensada:
fonte
""+this
na verdade""+this.toString()
, então o método se autodenomina.StringBuilder
objeto lá.toString
provavelmente será chamado de lá.toString()
método acaba sendopublic java.lang.String toString() { return this.toString(); }
C, 19 bytes
fonte
main.c:1:16: error: size of array 'i' is negative
para mim no gcc 4.8.1. A versão não assinadamain(){int i[~0U];}
funciona.sizeof(i)
for , é de 16GB. O uso de um sufixoul
ouull
faz diferença? Alguns sistemas comprometem demais a memória e somente travam se a memória for gravada.GolfScript (8 caracteres)
Resultado:
Basicamente, isso cria uma estrutura de dados muito aninhada e transborda a pilha ao tentar transformá-la em uma sequência.
fonte
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333
e ele quebrará.333
foi o menor valor que quebrou para mim, mas se você tiver uma versão diferente do Ruby (ou talvez a mesma versão em um sistema operacional diferente, pelo que sei), ele poderá lidar com um número diferente de quadros de pilha antes de transbordar.6.?
ainda funciona sem adicionar caracteres.montagem x86, sintaxe NASM, 7 bytes
"Pëý" é 50 EB FD em hexadecimal e
na montagem x86.
fonte
Ruby, 12
Dá
Presumivelmente, depende do sistema, mas você pode adicionar ordens de magnitude aumentando o último dígito (não recomendado).
Editar para explicação: Da mesma forma que em alguns outros exemplos, isso cria uma série de
[][][]
... repetidas 9000 vezes e depois a avalia: a mais à direita[]
é analisada como uma chamada de função para as demais, e assim por diante. Se realmente chegasse ao começo, lançaria um ArgumentError porque[]
é um objeto com um[]
método que requer um argumento, mas minha máquina gera um erro um pouco antes que a pilha ultrapasse nove mil.fonte
ruby
1.9.2 lança "ArgumentError: número errado de argumentos (0 para 1..2)".ruby
1.8.7. Lá, o código publicado funciona como descrito.def f;f;end;f
Rebol (11 caracteres)
Rendimentos:
Embora o Rebol tenha funções, fechamentos e objetos ... isso não define nenhum deles. Ele define uma estrutura de dados, que no paradigma código como dados pode ser tratada como código usando DO.
Podemos investigar a questão do "o que é S" com o REPL:
O DO nunca transforma isso em uma função, ele chama o avaliador no ambiente atual da estrutura.
fonte
C, 35 caracteres
fonte
alloca(1)
é basicamente traduzido parasub $1, %esp
que a pilha não seja tocada.Lisp comum, 7 caracteres
fonte
#1=(#1#)
para o terminal e(print #1=(#1#))
, mas sua solução é muito melhor.Python - 11 caracteres
fonte
Calculadora Casio, 11 teclas pressionadas
É muito difícil contar bytes / tokens nesse "idioma" - forneci o número de pressionamentos de tecla necessários, excluindo Shift, Alpha (a segunda tecla Shift) e
=
no final - isso certamente se encaixa em 1 byte por pressionamento de tecla.Testado no fx-85GT PLUS , que é uma calculadora científica padrão, não gráfica e "não programável". Outros modelos irão funcionar.
Apenas empilhe 11 raízes de cubo:
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
Ele nem dá um erro de sintaxe sobre o número ausente na raiz quadrada.
Isso não parece funcionar com raízes quadradas.
Como alternativa, repita cos( 31 vezes.
Resultado
Eu acredito que isso se qualifica como um estouro de pilha. A pilha parece ser pequena ...
fonte
(((((((((((((((((((((((((
FORTH, 13 bytes
excede a pilha de valores
fonte
: X X ; X
(9) deve estourar a pilha de retorno:
...;
definição de palavra. Isso adiciona pelo menos 6 caracteres, além de pelo menos mais 2 para executar como um programa. Você pode ser capaz de fazê-lo mais curto, mas aqui está um exemplo:: F BEGIN 1 AGAIN ; F
. Sugiro isso porque a pergunta é: "Escreva um programa". De qualquer forma, você recebeu um voto positivo pela Forth, independentemente da contagem de caracteres! :-)Postscript, 7
Por exemplo.
fonte
Haskell (GHC, sem otimização), 25
soma é preguiçosa no total. Isso empilha vários thunks e tenta avaliá-los no final, resultando em um estouro de pilha.
fonte
LaTeX: 8 caracteres
Este é o mesmo código usado nesta resposta . Essencialmente, a
\end
macro expande-se várias vezes, resultando em um estouro de pilha:TeX capacity exceeded, sorry [input stack size=5000]
. Uma explicação mais detalhada pode ser encontrada aqui .fonte
PHP 5.4, 33 caracteres
Isso causa um estouro de pilha quando os objetos stdClass aninhados são destruídos automaticamente:
fonte
Q / k (16 caracteres)
Não tenho certeza se isso está dentro do espírito do desafio, mas não acho que ele viole as regras:
fonte
Um monte no mesmo estilo:
Python, 30
Javascript, 38
Lua, 44
fonte
x=lambda y:y(y);x(x)
é mais curto (20 caracteres). Esta função não é recursiva. x chama qualquer função passada como argumento.->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
C #:
106865846322832 : Os Getters podem facilitar sua máquina em C #:
fonte
public int a {get{return a;}}
int a { get { return a; } }
INTERCAL, 12 bytes
Explicação:
NEXT
é a versão da INTERCAL de uma chamada de sub-rotina (ou, pelo menos, a mais próxima que você pode chegar). Empurra a posição atual para oNEXT
pilha e salta para o rótulo fornecido.No entanto, se o
NEXT
comprimento da pilha exceder 80, você obtém o que é praticamente a versão INTERCAL de um estouro de pilha:Experimente em Ideone. .
fonte
Mornington Crescent,
139133fonte
Montagem X86 (AT&T), 33 caracteres
Observe que, embora eu esteja usando o rótulo
main
como alvo de salto, essa não é uma função recursiva.fonte
dd 0fdeb60
10 caracteres!Python (17):
fonte
KeyError: 'unknown symbol table entry'