web-dev-qa-db-ja.com

スタックオーバーフローを引き起こす最短のコードは何ですか?

Stack Overflowの公開を記念して、スタックオーバーフローを引き起こす最短のコードは何ですか?任意の言語を歓迎します。

ETA:私がたまにSchemeユーザーであるように、この質問を明確にするために:テールコール「再帰」は本当に反復であり、まともなコンパイラーによって比較的些細な反復解に変換できる解決策はありませんカウントされます。 :-P

ETA2:「ベストアンサー」を選択しました。根拠については この投稿 を参照してください。貢献してくれたみんなに感謝します! :-)

160

Actionscript 3:すべて配列で完了...

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

最小ではないかもしれませんが、かわいいと思います。特に、新しい配列の長さを返すPushメソッド!

0
defmeta

OCaml

let rec f l = f l@l;;

これは少し異なります。スタックにはスタックフレームが1つしかありません(末尾が再帰的であるため)が、スタックをオーバーフローするまで入力が増え続けます。 fをそのように空でないリストで呼び出します(インタープリタープロンプトで):

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

プレーンでナイスなC.

0
N 1.1

VB.Net

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

それほど短くはありませんが、効果的です! (JavaScript)

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

JavaScript(17バイト)

eval(t="eval(t)")

VBスクリプト(25バイト)

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

楽しみのために、Motorola HC11アセンブリを調べる必要がありました。

              org           $100
Loop    nop
          jsr            Loop
0

別のWindowsバッチファイル:

:a
@call :a
0

Dのメタ問題:

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

コンパイル時のスタックオーバーフロー

0
BCS

ハスケル:

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

ルビー(再び):

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

多くのRubyソリューションが既にありますが、私は良い尺度のために正規表現を投げると思いました。

0
finnw
_asm t: call t;
0

ルビー、それほど短くはないが:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

本当にスタックを持っていなくても...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Python:

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

今までプレイしたことがない不正行為だと思う;)

8086アセンブラー:

org Int3VectorAdrress;それは不正行為ですか?

int 3

1バイト-またはコードを生成する5文字、何と言いますか?

0
Despatcher

X86アセンブリでは、0による除算のために、割り込みハンドラーのメモリ内の位置に0による除算命令を配置します。

0
Dennis Ferron

何故なの

mov sp,0

(スタックが大きくなります)

0
mike511

テールコールの最適化は、テールコールを行わないことで妨害されます。 Common LISPの場合:

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

Z80アセンブリ言語...

.org 1000
loop: call loop

これにより、ロケーション1000で3バイトのコードが生成されます。

1000 CD 00 10

0
Tim Ring

Fortran、13および20文字

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

または

call main
end

2番目のケースはコンパイラに依存しています。 for GNU Fortran、-fno-underscoringでコンパイルする必要があります。

(両方のカウントには必要な改行が含まれます)

0
F'x

Dyalog APL

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

プロローグ

このプログラムは、相談するとSWI-PrologとSicstus Prologの両方をクラッシュさせます。

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

C#では、これはスタックオーバーフローを作成します...

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

So.psと呼ばれるPostScriptファイルでは、execstackoverflowが発生します

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