it-swarm-eu.dev

Was ist der kürzeste Code, der einen Stapelüberlauf verursacht?

Was ist der kürzeste Code, um einen Stapelüberlauf auszulösen, um an den öffentlichen Start von Stack Overflow zu erinnern? Jede Sprache ist willkommen.

ETA: Nur um bei dieser Frage klar zu sein, da ich ein gelegentlicher Scheme-Benutzer bin: Tail-Call "Rekursion" ist wirklich eine Iteration, und jede Lösung, die von einem anständigen Compiler relativ trivial in eine iterative Lösung umgewandelt werden kann, wird dies nicht tun gezählt werden. :-P

ETA2: Ich habe jetzt eine "beste Antwort" ausgewählt. Siehe dieser Beitrag für die Begründung. Vielen Dank an alle, die dazu beigetragen haben! :-)

160

Actionscript 3: Alles erledigt mit Arrays ...

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

Vielleicht nicht die kleinste, aber ich finde es süß. Insbesondere die Push-Methode, die die neue Array-Länge zurückgibt!

0
defmeta

OCaml

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

Dieser ist ein bisschen anders. Es gibt nur einen Stapelrahmen auf dem Stapel (da er rekursiv ist), aber seine Eingabe wächst weiter, bis er den Stapel überläuft. Rufen Sie einfach f mit einer nicht leeren Liste auf (an der Interpreter-Eingabeaufforderung):

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

Plain und Nice C. Fühlt sich für mich sehr intuitiv an.

0
N 1.1

VB.Net

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

Nicht sehr kurz, aber effektiv! (JavaScript)

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

JavaScript (17 Bytes)

eval(t="eval(t)")

VB-Skript (25 Bytes)

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

Zum Spaß musste ich die Motorola HC11 Assembly nachschlagen:

              org           $100
Loop    nop
          jsr            Loop
0

Eine andere Windows-Batch-Datei:

:a
@call :a
0

Metaproblem in D:

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

kompilierzeitstapelüberlauf

0
BCS

Haskell:

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

Ruby (wieder):

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

Es gibt bereits eine Menge Ruby Lösungen, aber ich dachte, ich würde für ein gutes Maß einen regulären Ausdruck einbauen.

0
finnw
_asm t: call t;
0

Ruby, wenn auch nicht so kurz:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

Auch wenn es nicht wirklich einen Stapel hat ...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Python:

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

Ich denke, es ist Betrug, den ich noch nie zuvor gespielt habe;), aber jetzt geht es los

8086 Assembler:

org Int3VectorAdrress; ist das Betrug?

int 3

1 Byte - oder 5 Zeichen, die Code generieren, was sagen Sie?

0
Despatcher

Platzieren Sie in der x86-Assembly eine Division durch 0-Anweisung an der Stelle im Speicher des Interrupt-Handlers, an der Sie durch 0 dividieren möchten!

0
Dennis Ferron

warum nicht

mov sp,0

(Stapel wächst runter)

0
mike511

Die Optimierung von Tail Calls kann durch Nicht-Tail-Calls sabotiert werden. In Common LISP:

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

Z80 Assemblersprache ...

.org 1000
loop: call loop

dadurch werden 3 Byte Code an Position 1000 generiert.

1000 CD 00 10

0
Tim Ring

Fortran, 13 und 20 Zeichen

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

oder

call main
end

Der zweite Fall ist vom Compiler abhängig. Für GNU Fortran muss es mit -fno-underscoring kompiliert werden.

(Beide Zählungen beinhalten erforderliche Zeilenumbrüche)

0
F'x

Dyalog APL

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

Prolog

Dieses Programm bringt sowohl SWI-Prolog als auch Sicstus Prolog zum Absturz, wenn es konsultiert wird.

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

In C # würde dies einen Stapelüberlauf erzeugen ...

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

In einer PostScript Datei mit dem Namen so.ps wird ein Execstackoverflow ausgelöst

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