160

Stack Overflowの一般公開を記念して、スタックオーバーフローを引き起こす最短のコードは何ですか?どんな言語でも大歓迎です。

ETA:この質問を明確にするために、私はたまにSchemeユーザーであるため、末尾呼び出しの「再帰」は実際には反復であり、適切なコンパイラーによって比較的簡単に反復ソリューションに変換できるソリューションは、そうではありません。カウントされます。:-P

ETA2:「ベストアンサー」を選択しました。理論的根拠については、この投稿を参照してください。貢献してくれた皆さん、ありがとう!:-)

4

131 に答える 131

291

この行を読んで、それが言うことを2 回実行してください。

于 2008-09-15T16:05:34.793 に答える
211

これらすべての答えと Befunge はありませんか? 私はそれがそれらすべての最短の解決策であるとかなりの金額を賭けます:

1

冗談じゃない。自分で試してみてください: http://www.quirkster.com/iano/js/befunge.html

編集:これについて説明する必要があると思います。1 オペランドは 1 を Befunge の内部スタックにプッシュし、他に何もないため、言語の規則の下でループに入れます。

提供されたインタープリターを使用すると、Befunge スタックを表す Javascript 配列が大きくなりすぎてブラウザーが再割り当てできないポイントに到達します。以下のほとんどの言語の場合のように、スタックが小さく限定された単純な Befunge インタープリターを使用している場合、このプログラムはより顕著なオーバーフローをより速く引き起こします。

于 2008-09-15T20:43:25.687 に答える
173

C#.net でこれを試すこともできます

throw new StackOverflowException();
于 2008-09-15T11:53:38.830 に答える
159

ネメルレ:

これにより、コンパイラが StackOverflowException でクラッシュします。

def o(){[o()]}
于 2008-09-15T12:25:47.490 に答える
119

私の現在のベスト(x86アセンブリ)は次のとおりです。

push eax
jmp short $-1

これにより、3バイトのオブジェクトコード(50 EB FD)が生成されます。16ビットコードの場合、これも可能です。

call $

これも3バイト(E8 FD FF)になります。

于 2008-09-15T11:17:47.793 に答える
113

PIC18

TK によって与えられた PIC18 の回答は、次の命令 (バイナリ) になります。

overflow
   PUSH
   0000 0000 0000 0101
   CALL overflow
   1110 1100 0000 0000
   0000 0000 0000 0000

ただし、CALL だけではスタック オーバーフローが発生します。

CALL $
1110 1100 0000 0000
0000 0000 0000 0000

より小さく、より高速な PIC18

ただし、RCALL (相対呼び出し) はさらに小さくなります (グローバル メモリではないため、余分な 2 バイトは必要ありません)。

RCALL $
1101 1000 0000 0000

したがって、PIC18 で最小の命令は 16 ビット (2 バイト) の 1 つの命令です。これには、ループごとに 2 命令サイクルが必要です。命令サイクルあたり 4 クロック サイクルでは、8 クロック サイクルになります。PIC18 には 31 レベルのスタックがあるため、32 番目のループの後、256 クロック サイクルでスタックがオーバーフローします。64MHz では、4 マイクロ秒と 2 バイトでスタックがオーバーフローします

PIC16F5x (さらに小型で高速)

ただし、PIC16F5x シリーズは 12 ビット命令を使用します。

CALL $
1001 0000 0000

繰り返しますが、ループごとに 2 命令サイクル、命令ごとに 4 クロックなので、ループごとに 8 クロック サイクルです。

ただし、PIC16F5x には 2 レベルのスタックがあるため、3 番目のループで 24 命令でオーバーフローします。20MHz では、1.2 マイクロ秒と 1.5 バイトでオーバーフローします

インテル 4004

Intel 4004には、8 ビットの呼び出しサブルーチン命令があります。

CALL $
0101 0000

アスキー「P」に対応する好奇心のために。合計32.4 マイクロ秒と 1 バイトに 24 クロック サイクルかかる 3 レベル スタックを使用します。(4004 をオーバークロックしない限り、やりたいことはわかっています。)

これは befunge の回答と同じくらい小さいですが、現在のインタープリターで実行されている befunge コードよりもはるかに高速です。

于 2009-02-28T02:17:01.440 に答える
77

C#:

public int Foo { get { return Foo; } }
于 2008-09-15T11:21:28.457 に答える
57

フッオーバーフロー!

//              v___v
let rec f o = f(o);(o)
//             ['---']
//             -"---"-
于 2010-04-21T01:25:26.543 に答える
55

すべてのタスクには適切なツールが必要です。スタック オーバーフローを生成するように最適化されたSO オーバーフロー言語に対応します。

so
于 2008-09-16T08:36:39.890 に答える
42

テックス:

\def~{~.}~

結果:

! TeX の容量を超えました。申し訳ありません [入力スタック サイズ = 5000]。
~->~
    .
~->~
    .
~->~
    .
~->~
    .
~->~
    .
~->~
    .
...
<*> \def~{~.}~

ラテックス:

\end\end

結果:

! TeX の容量を超えました。申し訳ありません [入力スタック サイズ = 5000]。
\end #1->\csname end#1
                      \endcsname \@checkend {#1}\expandafter \endgroup \if@e...
<*> \end\end
于 2008-09-16T01:10:21.257 に答える
35

Z-80アセンブラ-メモリ位置0x0000:

rst 00

1バイト-0xC7-現在のPCをスタックにプッシュし、アドレス0x0000にジャンプする無限のループ。

于 2008-09-15T17:00:09.187 に答える
29

別のPHPの例:

<?
require(__FILE__);
于 2008-09-15T20:03:01.883 に答える
29

英語で:

recursion = n. See recursion.
于 2008-09-15T11:39:32.390 に答える
26

BASIC では次のようにします。

10 GOSUB 10

(私はBASICインタープリターを持っていないので、それは推測です)。

于 2008-09-15T12:24:45.933 に答える
26

私は Cody の回答ヒープが大好きだったので、C++ での同様の貢献を以下に示します。

template <int i>
class Overflow {
    typedef typename Overflow<i + 1>::type type;
};

typedef Overflow<0>::type Kaboom;

決してコード ゴルフ エントリではありませんが、それでも、メタ スタック オーバーフローのためのものです。:-P

于 2008-09-15T12:33:25.600 に答える
21

これが私のCの貢献で、18文字の重さがあります。

void o(){o();o();}

これは、末尾呼び出しの最適化が非常に困難です。:-P

于 2008-09-15T11:46:48.350 に答える
19

「s.bat」という名前のウィンドウのバッチファイルを使用する:

call s
于 2008-09-16T02:48:14.047 に答える
17

Javascript

さらにいくつかの文字をトリミングし、より多くのソフトウェアショップから追い出されるようにするには、次のようにしましょう。

eval(i='eval(i)');
于 2008-09-15T17:15:43.487 に答える
15

グルーヴィー:

main()

$グルーヴィーなstack.groovy:

Caught: java.lang.StackOverflowError
    at stack.main(stack.groovy)
    at stack.run(stack.groovy:1)
 ...
于 2008-09-15T16:24:08.917 に答える
15

「 GNU 」の略語を教えてください。

于 2009-06-22T19:09:50.473 に答える
14
Person JeffAtwood;
Person JoelSpolsky;
JeffAtwood.TalkTo(JoelSpolsky);

末尾再帰がないことを期待しています!

于 2008-09-16T02:38:59.857 に答える
12

C - 最短ではありませんが、再帰はありません。また、移植性もありません。Solaris ではクラッシュしますが、一部の alloca() 実装はここでエラーを返す (または malloc() を呼び出す) 場合があります。printf() の呼び出しが必要です。

#include <stdio.h>
#include <alloca.h>
#include <sys/resource.h>
int main(int argc, char *argv[]) {
    struct rlimit rl = {0};
    getrlimit(RLIMIT_STACK, &rl);
    (void) alloca(rl.rlim_cur);
    printf("Goodbye, world\n");
    return 0;
}
于 2008-09-15T15:14:11.393 に答える
11

Python

so=lambda:so();so()

または:

def so():so()
so()

そして、Pythonが最適化された末尾呼び出しの場合...:

o=lambda:map(o,o());o()
于 2008-09-15T11:30:43.380 に答える
11

12文字のperl:

$_=sub{&$_};&$_

10文字のbash(関数内のスペースは重要です):

i(){ i;};i
于 2008-09-15T12:39:09.003 に答える
11

1 つのハンバーガーに 4 枚以上のパティを載せてみてください。スタックオーバーフロー。

于 2008-09-15T16:18:11.537 に答える
10

この投稿の後に「ベストアンサー」を選択しています。しかし、最初に、いくつかの非常に独創的な貢献に感謝したいと思います。

  1. アクのもの。それぞれが、スタック オーバーフローを引き起こす新しい独自の方法を探っています。f(x) ⇒ f(f(x)) を実行するというアイデアは、以下の次のエントリで検討します。:-)
  2. Nemerleコンパイラにスタック オーバーフローを与えた Cody の 1 つ。
  3. そして (少ししぶしぶ)、GateKiller の 1 つは、スタック オーバーフロー例外のスローに関するものです。:-P

私は上記が大好きですが、この課題はコード ゴルフを行うことであり、回答者に公平を期すために、最も短いコードである Befunge エントリに「ベスト アンサー」を授与する必要があります。私は誰もそれを打ち負かすことができるとは信じていません (コンラッドは確かに試みましたが)、おめでとうパトリック!

再帰によるスタックオーバーフローのソリューションが多数あるのを見て、(現在の執筆時点で) 誰も Y コンビネータを持ち出していないことに驚いています (入門書については、Dick Gabriel のエッセイThe Why of Yを参照してください)。Y コンビネータと aku の f(f(x)) アプローチを使用する再帰的なソリューションがあります。:-)

((Y (lambda (f) (lambda (x) (f (f x))))) #f)
于 2008-09-16T12:48:03.683 に答える
8

これがSchemeのもう1つの興味深いものです。

((ラムダ(x)(xx))(ラムダ(x)(xx)))
于 2008-09-16T19:26:26.550 に答える
7

ジャワ

Java ソリューションのわずかに短いバージョン。

class X{public static void main(String[]a){main(a);}}
于 2008-09-15T14:41:42.233 に答える
6
xor esp, esp
ret
于 2008-09-15T15:20:22.720 に答える
5

3 バイト:

label:
  pusha
  jmp label

アップデート

(古い?) Intel(?) のドキュメントによると、これも 3 バイトです。

label:
  call label

于 2008-09-15T13:22:44.047 に答える
4

Java(恥ずかしい):

public class SO 
{ 
  private void killme()
  {
    killme();
  }

  public static void main(String[] args) 
  { 
    new SO().killme(); 
  } 
}

編集 もちろん、かなり短縮できます:

class SO
{
  public static void main(String[] a)
  {
    main(null);
  }
}
于 2008-09-15T12:43:04.580 に答える
4

C 関数のローカル変数として:

int x[100000000000];
于 2008-09-15T20:14:02.840 に答える
4

前方へ:

: a 1 recurse ; a

gforthインタープリターの内部:

: a 1 recurse ; a 
*the terminal*:1: Return stack overflow
: a 1 recurse ; a
                ^
Backtrace:

Open Firmware プロンプトの Power Mac G4 では、これは単にマシンをハングさせます。:)

于 2008-09-15T19:41:23.403 に答える
4

ルアの場合:

function f()return 1+f()end f()

再帰呼び出しの結果に対して何かを行う必要があります。そうしないと、末尾呼び出しの最適化により、永久にループすることができます。コードゴルフは苦手だけどあると嬉しい!

それと長いキーワードは、Lua がすぐにはコード ゴルフに勝てないことを意味していると思います。

于 2008-09-15T14:15:07.027 に答える
4

http://www.google.com/search?q=google.com

于 2008-09-16T20:51:19.373 に答える
3

C#

class _{static void Main(){Main();}}

私のプログラムはコンパイル可能なプログラムであり、単一の関数ではないことに注意してください。余分な空白も削除しました。

才能のために、私はクラス名をできるだけ小さくしました。

于 2008-09-15T20:34:01.937 に答える
3

GWBASIC出力..。

OK
10 i=0
20 print i;
30 i=i+1
40 gosub 20
run
 0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21
 22  23  24  25  26  27  28  29  30  31  32  33
Out of memory in 30
Ok

スタックの深さはあまりありません:-)

于 2008-09-15T13:47:40.820 に答える
3

Irssi (端末ベースの IRC クライアントであり、「実際の」プログラミング言語ではない) では、$L は現在のコマンド ラインを意味します。したがって、次のようにすると、スタック オーバーフロー (「最大再帰制限に達する」) を引き起こすことができます。

/eval $L
于 2008-09-16T07:49:44.197 に答える
3

コール フレームをプロセスと見なし、スタックを Unix マシンと見なす場合、フォーク ボムを並列プログラムと見なして、スタック オーバーフロー状態を作成することができます。この 13 文字の bash 番号を試してください。ファイルへの保存は必要ありません。

:(){ :|:& };:
于 2008-09-15T23:54:33.030 に答える
3

これまでのところ、Ruby は他のものよりも短い:

def a;a;end;a

(13文字)

于 2008-09-15T16:15:50.480 に答える
3

Scheme では、これによりインタプリタがメモリ不足になります。

(define (x)
  ((x)))

(x)
于 2008-09-15T14:43:06.583 に答える
3

call.cmd というバッチ プログラム。

call.cmd を呼び出す

******  B A T C H   R E C U R S I O N  exceeds STACK limits ******
Recursion Count=1240, Stack Usage=90 percent
******       B A T C H   PROCESSING IS   A B O R T E D      ******
于 2008-09-15T14:16:38.253 に答える
3

ルビー:

def s() s() end; s()
于 2008-09-15T12:26:09.923 に答える
2

ホワイトスペースでは、次のように思います。

おそらく表示されません。:/

于 2008-09-15T14:53:39.633 に答える
2

Groovy(5B):

run()
于 2008-09-17T05:45:16.780 に答える
2

PIC18:

オーバーフロー

    PUSH   
    CALL   overflow 
于 2008-09-15T11:34:39.190 に答える
2
a{return a*a;};

コンパイル:

gcc -D"a=main()" so.c

に展開:

main() {
    return main()*main();
}
于 2008-09-15T12:37:25.857 に答える
2

まあ、まだ誰もコールドフュージョンについて言及していないので...

<cfinclude template="#ListLast(CGI.SCRIPT_NAME, "/\")#">

それはそれをするべきです。

于 2008-09-15T18:04:05.260 に答える
2

空のプログラムがスタック オーバーフローを引き起こす言語がない限り、以下は可能な限り短くする必要があります。

Befunge:

:

トップスタック値を何度も複製します。

編集:パトリックの方が優れています。スタックを 1 で埋めることは、スタックを 0 で埋めることよりも優れています。これは、インタプリタがノーオペレーションとして空のスタックに 0 をプッシュすることを最適化できるためです。

于 2008-09-15T22:31:08.440 に答える
2

CIL/MSIL :

loop: ldc.i4.0
br loop

オブジェクトコード:

16 2B FD
于 2008-09-15T11:53:11.237 に答える
2

PostScript、7 文字

{/}loop

GhostScript で実行すると、次の例外がスローされます。

GS>{/}loop
Error: /stackoverflow in --execute--
Operand stack:
   --nostringval--
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   %loop_continue   1753   2   3   %oparray_pop   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   %loop_continue
Dictionary stack:
   --dict:1150/1684(ro)(G)--   --dict:0/20(G)--   --dict:70/200(L)--
Current allocation mode is local
Last OS error: 11
Current file position is 8

変数を使用しない再帰バージョン (51 文字) は次のとおりです。

[{/[aload 8 1 roll]cvx exec}aload 8 1 roll]cvx exec
于 2010-02-07T06:21:10.600 に答える
2

F#

「F# は何に役立つのですか?」という質問がよく寄せられます。

let rec f n =
    f (n)

パフォーマンスが最適化されたバージョン (より速く失敗します:))

let rec f n =
    f (f(n))
于 2008-09-15T13:51:49.373 に答える
2

C#

class Program
{
    class StackOverflowExceptionOverflow : System.Exception
    {
        public StackOverflowExceptionOverflow()
        {
            throw new StackOverflowExceptionOverflow();
        }
    }

    static void Main(string[] args)
    {
        throw new StackOverflowExceptionOverflow();
    }
}

私はこれが最短ではないことを理解しています (そして、ゴルフでゴルフをしたコードでさえ、短い距離に近づくことはできませんでした)、しかし、ランタイム自体を終了できるようになる前に、スローされている間に stackoverflowexception をスローする例外をスローすることに抵抗できませんでした。 ^^

于 2010-01-20T14:07:15.003 に答える
2

Java: 35 文字

手遅れだと思いますが、それでも私のアイデアを投稿します。

class A{{new A();}static{new A();}}

静的初期化子およびインスタンス初期化子機能を使用します。

これが私のコンピューターの出力です(2つのエラーメッセージが表示されたことに注意してください):

Exception in thread "main" java.lang.StackOverflowError
    at A.<init>(A.java:1)
        ......
    at A.<init>(A.java:1)
Could not find the main class: A. Program will exit.

参照: http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/javaOO/initial.html

于 2010-07-17T19:03:00.830 に答える
2

ハスケル:

let x = x
print x
于 2008-09-15T17:45:33.337 に答える
2

舌足らずの発音

(defun x() (x)) (x)
于 2008-09-15T12:35:03.180 に答える
2

ジャワ:

class X{static{new X();}{new X();}}

実際には、X クラスの初期化中にスタック オーバーフローが発生します。main() が呼び出される前に、JVM はクラスをロードする必要があります。ロードすると、匿名の静的コード ブロックがトリガーされます。

static {
  new X();
}

ご覧のとおり、デフォルトのコンストラクターを使用して X をインスタンス化します。JVM は、コンストラクターの前であっても匿名コード ブロックを呼び出します。

{
  new X();
}

これは再帰的な部分です。

于 2010-02-27T18:48:56.477 に答える
2

C++ コンパイラ エラー メッセージ

template<int n>struct f{f<n+1>a;};f<0>::a;

出力:

$ g++ test.cpp;
test.cpp:1: error: template instantiation depth exceeds maximum of 500 (use -ftemplate-depth-NN to increase the maximum) instantiating ‘struct f<500>’
test.cpp:1:   instantiated from ‘f<499>’
test.cpp:1:   instantiated from ‘f<498>’
......

コンパイラがテンプレートを通過したとしても、次のエラーがあります: missing main

于 2010-08-31T01:02:57.543 に答える
1

JavaScriptのもう1つ:

(function() { arguments.callee() })()
于 2008-09-16T13:04:43.787 に答える
1

すでにperlがありましたが、これは2文字短くなっています(9対12)-そしてそれは繰り返されません:)

s // * _ = 0 / e

于 2008-09-15T13:42:36.060 に答える
1

K&R Cの短いソリューションは、コンパイルできます。

main(){main()}

14バイト

于 2008-09-16T19:21:20.370 に答える
1
/* In C/C++ (second attempt) */

int main(){
    int a = main() + 1;
    return a;
}
于 2008-09-15T11:42:44.537 に答える
1

再びc#:

class Foo { public Foo() {new Foo(); } }
于 2008-09-15T12:37:42.110 に答える
1

Delphiプログラムを完了します。

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;

begin
  raise EStackOverflow.Create('Stack Overflow');
end.
于 2008-09-15T12:40:39.233 に答える
1

E2 のInfinite Loopにこれらのリストがあります。タイトルに「スタック オーバーフロー」と示されているものだけを参照してください。

最短だと思います

[dx]dx

DCで。Falseにはもっと短い解決策があるかもしれません。

編集:どうやらこれは機能しません...少なくともGNU dcでは。たぶん、BSDバージョンにありました。

于 2008-09-15T13:59:33.910 に答える
1

Java スクリプト:

Huppies は 1 行に答えます。

(function i(){ i(); })()

同じ量の文字ですが、改行はありません:)

于 2008-09-15T13:00:13.057 に答える
1

GNU メーカー:

次の内容の「Makefile」というファイルを作成します。

a:
    make

次に、make を実行します。

$ make

「make」という単語をオフセットするには、タブ文字を使用する必要があることに注意してください。このファイルは、2 つの行末文字と 1 つのタブ文字を含む 9 文字です。

bashでも同様のことができると思いますが、おそらく簡単すぎて面白くありません。

ファイル名「b」を作成し、実行可能としてマークします (chmod +xb):

b ## ties the winning entry with only one character (does not require end-of-line)

でファイルを実行します

$ ( PATH=$PATH:. ; b )

このアプローチが技術的にスタック オーバーフローを引き起こすかどうかを言うのは難しいですが、マシンがリソースを使い果たすまで成長するスタックを構築します。GNU make でこれを行うことの優れた点は、スタックを構築および破棄するときにステータス情報を出力するのを見ることができることです (クラッシュが発生する前のある時点で ^C を押すと仮定します)。

于 2010-02-27T18:08:04.410 に答える
1

パールで:

`$0`

実際のところ、これは逆引用符コマンド構文をサポートし、独自の名前を$0

于 2008-09-18T06:31:11.857 に答える
1

TCL:

proc a {} a

私は末尾再帰を実行できる tclsh インタープリターを持っていませんが、これはそのようなことを欺く可能性があります。

proc a {} "a;a"
于 2008-09-15T18:50:10.063 に答える
1

最短ではありませんが、何かを試さなければなりませんでした... C#

文字列[] f = 新しい文字列[0]; メイン(f);

少し短い

static void Main(){Main();}
于 2008-09-16T01:35:33.910 に答える
1

改行を含む10 文字のシェル スクリプト ソリューション:

技術的にはスタック オーバーフローではありませんが、新しいスタック フレームの構築として新しいプロセスを生成することを考えると、論理的にはそうです。

#!sh
./so

結果:

antti@blah:~$ ./so
[disconnected]

おっと。注:自宅でこれを試さないでください

于 2008-09-15T14:44:00.170 に答える
1

アセンブリ言語 (x86 プロセッサ、16 または 32 ビット モード):


call $

これは以下を生成します:

  • 32 ビット モード: 0xe8;0xfb;0xff;0xff;0xff

  • 16 ビット モード: 0xe8;0xfd;0xff

C/C++ で:


int main( ) {
  return main( );
}
于 2008-09-15T16:45:15.387 に答える
1

Java (X.java の完全な内容):

class X {
public static void main(String[] args) {
    main(null);
}}

すべてのシンタックス シュガーを考慮すると、Java で短縮できるかどうか疑問に思っています。誰?

編集:おっと、ほぼ同じソリューションが既に投稿されているのを見逃しました。

EDIT 2:これは(キャラクターに関して)可能な限り最短だと思います

class X{public static void main(String[]a){main(null);}}

EDIT 3: null は最適な引数ではないことを指摘してくれた Anders に感謝します。

class X{public static void main(String[]a){main(a);}}
于 2008-09-15T13:13:58.747 に答える
1

Vb6


Public Property Let x(ByVal y As Long)
  x = y
End Property

Private Sub Class_Initialize()
  x = 0
End Sub
于 2008-09-16T14:35:11.807 に答える
1

15 文字の so.c :

main(){main();}

結果:

antti@blah:~$ gcc so.c -o so
antti@blah:~$ ./so
Segmentation fault (core dumped)

編集:わかりました。-Wall で警告が表示され、-O2 でスタック オーバーフローが発生しません。しかし、それはうまくいきます!

于 2008-09-15T12:46:40.640 に答える
1

Y コンビネータのコメントに応えて、SKI 微積分の Y コンビネータを使用することもできます。

S (K (S I I)) (S (S (K S) K) (K (S I I)))

私が知っている SKI インタープリターはありませんが、actionscript でグラフィカルなものを約 1 時間で作成したことがあります。興味があれば投稿したいと思います(ただし、レイアウトが非常に効率的に機能することはありませんでした)

ここですべてを読んでください: http://en.wikipedia.org/wiki/SKI_combinator_calculus

于 2008-09-17T01:24:24.537 に答える
1

間違い:

[1][1]#

(False はスタック言語です。 # は、条件と本体の 2 つのクロージャーを使用する while ループです。本体は、オーバーフローを引き起こすものです)。

于 2008-09-18T08:41:28.707 に答える
1

これは別のRubyの回答です。これはラムダを使用しています:

(a=lambda{a.call}).call
于 2008-09-16T10:14:39.810 に答える
1

ハスケルで

fix (1+)

これは (1+) 関数 ( ) の不動点を見つけようとしますλ n → n + 1。修正の実装は

fix f = (let x = f(x) in x)

そう

fix (1+)

になる

(1+) ((1+) ((1+) ...))

ご了承ください

fix (+1)

ループするだけです。

于 2009-03-03T10:55:26.800 に答える
1

パワーシェル

$f={&$f};&$f

「呼び出し深度のオーバーフローにより、スクリプトが失敗しました。呼び出し深度は 1001 に達し、最大値は 1000 です。」

于 2008-09-15T15:36:46.847 に答える
1

PHPは再帰的な頭字語です

于 2010-07-03T13:18:22.687 に答える
1

より良い lua ソリューション:

function c()c()end;

これを SciTE または対話型コマンド プロンプトに貼り付けて呼び出します。ブーム!

于 2009-06-10T06:16:37.207 に答える
1

1 行での CMD オーバーフロー

echo @call b.cmd > b.cmd & b
于 2009-02-20T18:49:01.450 に答える
1

.

于 2010-07-21T22:29:27.850 に答える
0
int main(void) { return main(); }
于 2010-06-12T16:07:33.303 に答える
0

私はこれまでプレイしたことがない不正行為だと思います;)しかしここに行きます

8086アセンブラ:

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

int 3

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

于 2008-09-15T22:53:01.960 に答える
0

セルスパスでは、スタックオーバーフローが発生しないため、再帰の必要はなく、スタックポインタをワイプするだけで済みます。

asm( "andi $ 1、$ 1、0");

于 2008-09-15T13:19:41.777 に答える
0

Fortran、13文字および20文字

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

また

call main
end

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

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

于 2010-03-07T14:46:11.467 に答える
0

C#では、これによりスタックオーバーフローが発生します...

static void Main()
{
    Main();
}
于 2008-09-16T04:23:22.603 に答える
0

別のWindowsバッチファイル:

:a
@call :a
于 2010-02-26T18:10:14.193 に答える
0
int main(){
    int a = 20;
    return main();
}
于 2008-09-15T11:36:13.007 に答える
0

JavaScript:

function i(){ i(); }
i();


C ++ 関数ポインタの使用:

int main(){
   int (*f)() = &main;
   f();
}
于 2008-09-15T11:37:05.347 に答える
0

楽しみのために、私はモトローラHC11アセンブリを調べなければなりませんでした:

              org           $100
Loop    nop
          jsr            Loop
于 2008-09-15T20:05:30.070 に答える
0

クラリオン:

Poke(0)
于 2008-09-15T12:41:28.373 に答える
0
//lang = C++... it's joke, of course
//Pay attention how 
void StackOverflow(){printf("StackOverflow!");}
int main()
{
    StackOverflow(); //called StackOverflow, right?
}
于 2008-09-15T13:48:02.177 に答える
0

スタック オーバーフローを引き起こす 16 ビット asm の 5 バイト。

push cs
push $-1
ret
于 2008-09-15T16:27:46.910 に答える
0

JavaScript (17 バイト)

eval(t="eval(t)")

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

t="Execute(t)":Execute(t)
于 2010-07-27T13:12:47.363 に答える
0

MS-DOS バッチ:

copy CON so.bat
so.bat
^Z
so.bat
于 2008-09-15T14:27:41.550 に答える
0
main(){
   main();
}

プレーンでナイスなC。私には非常に直感的です。

于 2010-02-26T21:36:40.953 に答える
0

ルビー(再び):

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

すでに多くの Ruby ソリューションがありますが、適切な手段として正規表現を入れようと思いました。

于 2010-01-31T19:39:32.800 に答える
0

パイソン:

import sys  
sys.setrecursionlimit(sys.maxint)  
def so():  
    so()  
so()
于 2010-07-12T17:19:51.397 に答える
0

C#、20 文字で実行 (空白を除く):

int s(){
    return s();
}
于 2008-09-15T11:47:37.067 に答える
0

D のメタ問題:

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

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

于 2009-04-22T20:36:09.433 に答える
0

テール コールの最適化は、テール コールを行わないことで妨害される可能性があります。Common Lisp では:

(defun f () (1+ (f)))
于 2009-02-28T03:49:54.057 に答える
0

再帰は古い帽子です。これが相互再帰です。いずれかの関数を呼び出して開始します。

a()
{
    b();
}
b()
{
    a();
}

PS: しかし、あなたは最短の方法を求めていました..最も創造的な方法ではありません!

于 2008-09-15T13:01:30.680 に答える
0

C++ :

int overflow(int n)
{
    return overflow(1);
}
于 2008-09-15T11:20:22.483 に答える
0
_asm t: call t;
于 2009-05-11T14:55:15.993 に答える
0

なぜだめですか

mov sp,0

(スタックは下に成長します)

于 2008-09-16T05:22:41.820 に答える
0

PHP - 楽しみのための再帰。PHP インタープリターが必要になると、実行が停止すると思いますが、クラッシュします。

function a() { a(); } a();
于 2008-09-15T13:35:37.837 に答える
0

ダイアログ APL

fib←{
    ⍵∊0 1:⍵
    +/∇¨⍵-1 2
}
于 2010-06-12T15:55:39.957 に答える
0

実際にはスタックがありませんが...

ブレインファック5キャラ

+[>+]
于 2009-11-15T21:26:32.823 に答える
0

bash: 1 つのプロセスのみ

\#!/bin/bash
of() { of; }
of
于 2008-09-15T16:09:44.910 に答える
0

Z80 アセンブリ言語...

.org 1000
loop: call loop

これにより、位置 1000 に 3 バイトのコードが生成されます....

1000 CD 00 10

于 2009-12-31T15:04:32.277 に答える
0

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

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

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

于 2008-09-16T22:46:41.267 に答える
0

私はErlangでそれをやろうとしました:

c(N)->c(N+1)+c(N-1).
c(0).

それ自体の二重呼び出しにより、メモリ使用量が増加しO(n^2)ますO(n)

しかし、Erlang インタープリターはどうにかしてクラッシュするようには見えません。

于 2008-09-15T12:57:10.927 に答える
0

それほど短くはありませんが、Ruby:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
于 2008-09-16T00:25:46.107 に答える
0

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

于 2008-09-17T01:42:04.340 に答える
0

ハスケル:

main = print $ x 1 where x y = x y + 1
于 2010-05-25T11:40:07.883 に答える
0

so.psというPostScriptファイルでは、execstackoverflow が発生します。

%!PS
/increase {1 add} def
1 increase
(so.ps) run
于 2008-09-16T05:37:25.140 に答える
0

10文字のPerl

sub x{&x}x

最終的に、利用可能なすべてのメモリを使い果たします。

于 2008-09-15T14:21:41.767 に答える
0

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

setTimeout(1, function() {while(1) a=1;});
于 2008-09-15T20:29:03.320 に答える
0

VB.Net

Function StackOverflow() As Integer
    Return StackOverflow()
End Function
于 2008-09-15T18:14:29.650 に答える
0

27 個の非空白文字を含む C# - 呼び出しが含まれます。

Action a = null;
a = () => a();
a();
于 2008-09-15T15:17:07.407 に答える
0

ほぼすべてのシェル:

sh $0

(5 文字、ファイルから実行する場合のみ機能)

于 2008-09-15T16:17:34.830 に答える
0

OCaml

let rec f l = f l@l;;

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

# f [0];;
Stack overflow during evaluation (looping recursion?).
于 2009-11-14T21:34:39.690 に答える
0

プロローグ

このプログラムを参照すると、SWI-Prolog と Sicstus Prolog の両方がクラッシュします。

p :- p, q.
:- p.
于 2009-02-24T21:21:54.810 に答える
-1

プロローグ

p:-p。

= 5 文字

次に、それを開始してpをクエリします

それはかなり小さく、プロローグでスタックが不足していると思います。

swi プロローグで変数のみをクエリすると、次のようになります。

?- X. % ... 1,000,000 ............ 10,000,000 年後 % % >> 42 << (最後のリリースで問題が発生)

そして、ここに別の bash フォーク爆弾があります: :(){ :|:& };:

于 2008-09-15T20:12:25.013 に答える
-1

これはJavaで機能すると思います(未試行):

enum A{B.values()}
enum B{A.values()}

main(String[]) がないために失敗する前に、静的初期化でオーバーフローする必要があります。

于 2008-09-16T01:24:17.853 に答える
-1

ルビー:

def i()i()end;i()

(17文字)

于 2008-09-15T14:01:40.647 に答える
-6

おっと、私は知りません、スタック オーバーフローを引き起こすコードを書いたことはありません ;)

于 2008-09-15T19:49:20.950 に答える