it-swarm-es.tech

¿Cuál es el código más corto para causar un desbordamiento de pila?

Para conmemorar el lanzamiento público de Stack Overflow, ¿cuál es el código más corto para provocar un overflow de pila? Cualquier idioma bienvenido.

ETA: Solo para ser claro en esta pregunta, ya que soy un usuario ocasional de Scheme: la "recursión" de cola es realmente una iteración, y cualquier solución que pueda convertirse en una solución iterativa de forma relativamente trivial por un compilador decente no lo hará. ser contados. :-PAG

ETA2: Ahora he seleccionado una "mejor respuesta"; ver este post para la justificación. ¡Gracias a todos los que contribuyeron! :-)

160
Chris Jester-Young

Actionscript 3: Todo hecho con matrices ...

var i=[];
i[i.Push(i)]=i;
trace(i);

Quizás no sea el más pequeño pero creo que es lindo. ¡Especialmente el método Push que devuelve la nueva longitud de matriz!

0
defmeta

OCAML

let rec f l = f [email protected];;

Este es un poco diferente. Sólo hay un marco de pila en la pila (ya que es la cola recursiva), pero su entrada sigue creciendo hasta que se desborda la pila. Simplemente llame a f con una lista no vacía como así (en el indicador del intérprete):

# f [0];;
Stack overflow during evaluation (looping recursion?).
0
Graphics Noob
int main(void) { return main(); }
0
Daniel Băluţă
main(){
   main();
}

Sencillo y agradable C. Se siente bastante intuitivo para mí.

0
N 1.1

VB.Net

Function StackOverflow() As Integer
    Return StackOverflow()
End Function
0
Kibbee

¡No muy corto, pero efectivo! (JavaScript)

setTimeout(1, function() {while(1) a=1;});
0
Thevs

JavaScript (17 bytes)

eval(t="eval(t)")

VB Script (25 bytes)

t="Execute(t)":Execute(t)
0
st0le

Por diversión, tuve que buscar el ensamblaje Motorola HC11:

              org           $100
Loop    nop
          jsr            Loop
0
PersistenceOfVision

Otro archivo de Windows Batch:

:a
@call :a
0
Carlos Gutiérrez

Meta problema en D:

class C(int i) { C!(i+1) c; }
C!(1) c;

compilar desbordamiento de pila de tiempo

0
BCS

Haskell:

main = print $ x 1 where x y = x y + 1
0
jkramer

Ruby (otra vez):

def a(x);x.gsub(/./){a$0};end;a"x"

Ya hay muchas soluciones de Ruby, pero pensé que me gustaría lanzar una expresión regular en buena medida.

0
finnw
_asm t: call t;
0
Tolgahan Albayrak

Ruby, aunque no tan corto:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

A pesar de que realmente no tiene una pila ...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Pitón:

import sys  
sys.setrecursionlimit(sys.maxint)  
def so():  
    so()  
so()
0
Artur Gaspar

Creo que es una trampa que nunca he jugado antes;) pero aquí va

Ensamblador 8086:

org Int3VectorAdrress; ¿eso es hacer trampa?

int 3

1 byte o 5 caracteres que generan código, ¿qué dices?

0
Despatcher

En el ensamblaje x86, coloque una instrucción de división por 0 en la ubicación en la memoria del controlador de interrupción para dividir entre 0

0
Dennis Ferron

por qué no

mov sp,0

(la pila crece hacia abajo)

0
mike511

La optimización de llamadas de cola puede ser saboteada por no llamadas de cola. En LISP común:

(defun f () (1+ (f)))
0
Svante

Lenguaje ensamblador Z80 ...

.org 1000
loop: call loop

esto genera 3 bytes de código en la ubicación 1000 ...

1000 CD 00 10

0
Tim Ring

Fortran, 13 y 20 caracteres.

real n(0)
n(1)=0
end

o

call main
end

El segundo caso es dependiente del compilador; para GNU Fortran, deberá compilarse con -fno-underscoring.

(Ambos recuentos incluyen nuevas líneas requeridas)

0
F'x

Dyalog APL

fib←{
    ⍵∊0 1:⍵
    +/∇¨⍵-1 2
}
0
wash

Prólogo

Este programa bloquea tanto SWI-Prolog como Sicstus Prolog cuando se consulta.

p :- p, q.
:- p.
0
Kaarel

En C # , esto crearía un stackoverflow ...

static void Main()
{
    Main();
}
0
user11039

En un PostScript archivo llamado así.ps causará execstackoverflow

%!PS
/increase {1 add} def
1 increase
(so.ps) run
0
Mark Nold