Stack Overflowの公開を記念して、スタックオーバーフローを引き起こす最短のコードは何ですか?任意の言語を歓迎します。
ETA:私がたまにSchemeユーザーであるように、この質問を明確にするために:テールコール「再帰」は本当に反復であり、まともなコンパイラーによって比較的些細な反復解に変換できる解決策はありませんカウントされます。 :-P
ETA2:「ベストアンサー」を選択しました。根拠については この投稿 を参照してください。貢献してくれたみんなに感謝します! :-)
Actionscript 3:すべて配列で完了...
var i=[];
i[i.Push(i)]=i;
trace(i);
最小ではないかもしれませんが、かわいいと思います。特に、新しい配列の長さを返すPushメソッド!
OCaml
let rec f l = f l@l;;
これは少し異なります。スタックにはスタックフレームが1つしかありません(末尾が再帰的であるため)が、スタックをオーバーフローするまで入力が増え続けます。 f
をそのように空でないリストで呼び出します(インタープリタープロンプトで):
# f [0];;
Stack overflow during evaluation (looping recursion?).
int main(void) { return main(); }
main(){
main();
}
プレーンでナイスなC.
VB.Net
Function StackOverflow() As Integer
Return StackOverflow()
End Function
それほど短くはありませんが、効果的です! (JavaScript)
setTimeout(1, function() {while(1) a=1;});
eval(t="eval(t)")
t="Execute(t)":Execute(t)
楽しみのために、Motorola HC11アセンブリを調べる必要がありました。
org $100
Loop nop
jsr Loop
別のWindowsバッチファイル:
:a
@call :a
Dのメタ問題:
class C(int i) { C!(i+1) c; }
C!(1) c;
コンパイル時のスタックオーバーフロー
ハスケル:
main = print $ x 1 where x y = x y + 1
ルビー(再び):
def a(x);x.gsub(/./){a$0};end;a"x"
多くのRubyソリューションが既にありますが、私は良い尺度のために正規表現を投げると思いました。
_asm t: call t;
ルビー、それほど短くはないが:
class Overflow
def initialize
Overflow.new
end
end
Overflow.new
本当にスタックを持っていなくても...
brainf * ck 5 char
+[>+]
Python:
import sys
sys.setrecursionlimit(sys.maxint)
def so():
so()
so()
今までプレイしたことがない不正行為だと思う;)
8086アセンブラー:
org Int3VectorAdrress;それは不正行為ですか?
int 3
1バイト-またはコードを生成する5文字、何と言いますか?
X86アセンブリでは、0による除算のために、割り込みハンドラーのメモリ内の位置に0による除算命令を配置します。
何故なの
mov sp,0
(スタックが大きくなります)
テールコールの最適化は、テールコールを行わないことで妨害されます。 Common LISPの場合:
(defun f()(1+(f)))
Z80アセンブリ言語...
.org 1000
loop: call loop
これにより、ロケーション1000で3バイトのコードが生成されます。
1000 CD 00 10
real n(0)
n(1)=0
end
または
call main
end
2番目のケースはコンパイラに依存しています。 for GNU Fortran、-fno-underscoring
でコンパイルする必要があります。
(両方のカウントには必要な改行が含まれます)
Dyalog APL
fib←{
⍵∊0 1:⍵
+/∇¨⍵-1 2
}
プロローグ
このプログラムは、相談するとSWI-PrologとSicstus Prologの両方をクラッシュさせます。
p :- p, q.
:- p.
C#では、これはスタックオーバーフローを作成します...
static void Main()
{
Main();
}
So.psと呼ばれるPostScriptファイルでは、execstackoverflowが発生します
%!PS
/increase {1 add} def
1 increase
(so.ps) run