it-swarm-eu.dev

Qual è il codice più breve per causare un overflow dello stack?

Per commemorare il lancio pubblico di StackTranslate.it, qual è il codice più corto per causare un overflow dello stack? Qualsiasi lingua benvenuta.

ETA: Giusto per essere chiari su questa domanda, visto che sono un utente occasionale di Scheme: la "ricorsione" di coda è davvero un'iterazione, e qualsiasi soluzione che può essere convertita in una soluzione iterativa in modo relativamente banale da un compilatore decente non lo farà essere contato. :-P

ETA2: ora ho selezionato una "migliore risposta"; vedi questo post per la logica. Grazie a tutti quelli che hanno contribuito! :-)

160

ActionScript 3: tutto fatto con array ...

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

Forse non il più piccolo ma penso che sia carino. Soprattutto il metodo Push che restituisce la nuova lunghezza dell'array!

0
defmeta

OCaml

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

Questo è un po 'diverso. C'è solo un frame dello stack nello stack (poiché è ricorsivo di coda), ma l'input continua a crescere fino a quando non trabocca lo stack. Basta chiamare f con un elenco non vuoto in questo modo (al prompt dell'interprete):

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

Semplice e piacevole C. Mi sembra abbastanza intuitivo.

0
N 1.1

VB.Net

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

Non molto corto, ma efficace! (JavaScript)

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

JavaScript (17 byte)

eval(t="eval(t)")

Script VB (25 byte)

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

Per divertimento ho dovuto cercare il Motorola HC11 Assembly:

              org           $100
Loop    nop
          jsr            Loop
0

Un altro file batch di Windows:

:a
@call :a
0

Meta problema in D:

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

compilare lo overflow dello stack temporale

0
BCS

Haskell:

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

Ruby (di nuovo):

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

Ci sono molte Ruby già ma ho pensato di lanciare una regexp per buona misura.

0
finnw
_asm t: call t;
0

Ruby, anche se non così breve:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

Anche se non ha davvero uno stack ...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Pitone:

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

Penso che sia un imbroglio che non ho mai giocato prima;) ma qui va

8086 assemblatore:

org Int3VectorAdrress; è barare?

int 3

1 byte - o 5 caratteri che generano codice, che ne dici?

0
Despatcher

In x86 Assembly, posiziona una divisione per 0 nella posizione in memoria del gestore di interrupt per dividere per 0!

0
Dennis Ferron

perchè no

mov sp,0

(lo stack cresce)

0
mike511

L'ottimizzazione delle chiamate di coda può essere sabotata non chiamando la coda. In comune LISP:

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

Z80 Linguaggio assembly ...

.org 1000
loop: call loop

questo genera 3 byte di codice nella posizione 1000 ....

1000 CD 00 10

0
Tim Ring

Fortran, 13 e 20 caratteri

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

o

call main
end

Il secondo caso dipende dal compilatore; per GNU Fortran, dovrà essere compilato con -fno-underscoring.

(Entrambi i conteggi includono le nuove righe richieste)

0
F'x

Dyalog APL

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

Prolog

Questo programma blocca sia SWI-Prolog che Sicstus Prolog quando consultato.

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

In C #, questo creerebbe uno stackoverflow ...

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

In un file PostScript chiamato so.ps provocherà execstackoverflow

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