StackOverflowエラーまたは使用する言語で同等のエラーをスローするプログラムを作成します。たとえば、javaでは、プログラムはをスローする必要がありjava.lang.StackOverflowErrorます。
自分自身または新しいクラスを呼び出す関数を定義することはできません(mainjavaに含まれるクラスを除く)。選択したプログラミング言語のクラスを使用する必要があります。
また、エラーを明示的にスローするべきではありません。
def s{def t=s;t}ですか?
StackOverflowエラーまたは使用する言語で同等のエラーをスローするプログラムを作成します。たとえば、javaでは、プログラムはをスローする必要がありjava.lang.StackOverflowErrorます。
自分自身または新しいクラスを呼び出す関数を定義することはできません(mainjavaに含まれるクラスを除く)。選択したプログラミング言語のクラスを使用する必要があります。
また、エラーを明示的にスローするべきではありません。
def s{def t=s;t}ですか?
回答:
@、プログラムが終了するまで、制御フローがラップアラウンドします。
import sys
sys.setrecursionlimit(1)
この操作自体は成功しますが、RuntimeError: 'maximum recursion depth exceeded'結果としてスクリプトとインタラクティブの両方がすぐにスローされます。
elssarの答えに触発されました。
Compute 70000.
70000はS (S ( ... (S O) ...))70000 Sの構文糖衣です。スタックオーバーフローを引き起こすのは型チェッカーだと思います。
コマンドを実行する前に出力される警告は次のとおりです。
Warning: Stack overflow or segmentation fault happens when working with large
numbers in nat (observed threshold may vary from 5000 to 70000 depending on
your system limits and on the command executed).
class S{static{new S();}{new S();}}
public static void mainそこにありません。それとも、Javaを理解していないだけですか?
ブラウザ依存の回答(へのアクセス権が必要apply):
eval.apply(0,Array(999999))
eval 私が見つけることができる最短のグローバル関数名でした(誰がより短いものを知っていますか?apply配列を関数パラメーターに変換できます。最初のパラメーターは関数のコンテキストです(this)Array(999999)リストされた長さの配列を作成します。引数の最大数がわからないが、これより小さく、より多い99999IE9:
SCRIPT28: Out of stack space
SCRIPT2343: Stack overflow at line: 20
Chrome 24:
Uncaught RangeError: Maximum call stack size exceeded
FireFox 18
RangeError: arguments array passed to Function.prototype.apply is too large
注 — JavaScriptのシングルスレッドの性質により、無限ループはUIをロックし、例外をスローしなくなります。
while(1);
for(;;);
これらのどちらも資格がありません。
更新 —これにより、3つの文字が削られます。
eval.apply(0,Array(1e7))
evalが最短だと言います。
eval.apply(0,Array(1e6))3つの文字を保存し、あなたも一緒に行くことができ9e9、無償で
apply標準のECMAScript機能です。ブラウザに依存するものは何もありません。あなたは本当に古いブラウザについて話しているが、これはとの仮定のネットスケープ2に動作しない場合を除きapplyので、とにかくArrayクラスはNetscapeの2に存在しない
eval(...Array(9e9))
dir.apply(0,Array(1e7));
exec('{'*99)
«s_push:パーサースタックオーバーフロー»が発生します
SyntaxError: unexpected EOF while parsing
exec('{'*101)私を取得MemoryError
execあなただけ使用できるように、ステートメントですexec'{'*999(99が十分ではないようです)
x=2x
$ RecursionLimit :: reclim:再帰の深さ1024を超えました。>>
これは「自己呼び出しメソッドなし」ルールの精神にとどまると思います。それは明示的にそれをしません、そして、それはJava言語構造さえ経ます。
public class S {
public String toString() {
return ""+this;
}
public static void main(String[] a) {
new S().toString();
}
}
要約版:
public class S{public String toString(){return ""+this;}public static void main(String[] a){new S().toString();}}
""+this実際に""+this.toString()はですので、メソッドは自分自身を呼び出します。
StringBuilderそこにオブジェクトをスローすることはかなり確実です。toStringおそらくそこから呼び出されます。
toString()するまでに、メソッドは次のようになりますpublic java.lang.String toString() { return this.toString(); }
main(){int i[~0u];}
main.c:1:16: error: size of array 'i' is negativegcc 4.8.1 で提供されます。署名されていないバージョンはmain(){int i[~0U];}動作します。
sizeof(i)16GBです。ulまたはull接尾辞を使用すると違いが生じますか?一部のシステムはメモリをオーバーコミットし、メモリが書き込まれた場合にのみクラッシュします。
{]}333*`
結果:
$ golfscript.rb overflow.gs
golfscript.rb:246:in `initialize': stack level too deep (SystemStackError)
from /home/pjt33/bin/golfscript.rb:130:in `new'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `map'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `map'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
... 993 levels...
from (eval):4
from /home/pjt33/bin/golfscript.rb:293:in `call'
from /home/pjt33/bin/golfscript.rb:293:in `go'
from /home/pjt33/bin/golfscript.rb:485
基本的に、これはネストされたデータ構造を作成し、それを文字列に変換しようとするとスタックをオーバーフローさせます。
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333、それは壊れます。333壊れた最小の値でしたが、Rubyの異なるバージョン(または、おそらく別のOS上の同じバージョン)がある場合、オーバーフローする前に異なる数のスタックフレームを処理する可能性があります。
6.?、文字を追加しなくても動作します。
db"Pëý"
「Pëý」は16進数で50 EB FDです。
_loop:
push eax
jmp _loop
x86アセンブリ。
eval"[]"*9e3
与える
SystemStackError: stack level too deep
おそらくシステムに依存しますが、最後の桁を上げることで桁違いに追加できます(推奨されません)。
説明用に編集:他のいくつかの例と同様に、これは[][][]...繰り返し9000回の文字列を作成し、それを評価します:一番右[]が残りの関数呼び出しとして解析されます。実際に最初に到達[]した[]場合、1つの引数を必要とするメソッドを持つオブジェクトであるため、ArgumentErrorがスローされますが、スタックが9000を超える少し前にマシンがエラーをスローします。
ruby1.9.2は「ArgumentError:間違った数の引数(1..2の場合は0)」をスローします。
ruby1.8.7が見つかりました。投稿されたコードは説明どおりに機能します。
def f;f;end;f
do s:[do s]
利回り:
>> do(s:[do s])
** Internal error: stack overflow
** Where: do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do...
Rebolには関数、クロージャー、オブジェクトがありますが、これらはいずれも定義していません。これはデータ構造を定義します。これは、コードとしてのデータパラダイムでは、DOを使用してコードとして扱うことができます。
REPLを使用して、「Sとは何か」の問題を詳しく調べることができます。
>> s: [do s]
== [do s]
>> type? s
== block!
>> length? s
== 2
>> type? first s
== word!
>> type? second s
== word!
DOはこれを関数に変換せず、構造上の現在の環境で評価者を呼び出します。
#1='#1#
#1=(#1#)端末とに使用する予定でした(print #1=(#1#))が、あなたの解決策ははるかに優れています。
この「言語」でバイト/トークンをカウントするのは非常に困難です-Shift、Alpha(2番目のシフトキー)を除くキープレスの回数を指定しました。これはキープレス=ごとに1バイトに収まります。
fx-85GT PLUSモデルでテストされました。これは、標準のグラフ化されていない「プログラム不可能な」科学計算用電卓です。他のモデルでも動作します。
11個のキューブルートを積み重ねるだけです。
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
平方根の下に欠落している数に関する構文エラーさえ与えません。
これは平方根では機能しないようです。
または、cos(31回繰り返します。
Stack ERROR
[AC] :Cancel
[<][>]:Goto
これはスタックオーバーフローとみなされると思います。スタックは小さいようです...
(((((((((((((((((((((((((
BEGIN 1 AGAIN
値スタックをオーバーフローします
: X X ; X(9)リターンスタックをオーバーフローさせる必要がある
:... ;ワード定義でラップする必要があります。これにより、少なくとも6文字が追加され、さらに少なくとも2文字が追加され、プログラムとして実行されます。短くすることもできますが、例を示します: F BEGIN 1 AGAIN ; F。これは、「プログラムを書く」という質問に答えるからです。とにかく、文字数に関係なく、Forthに賛成票を投じました!:-)
{1}loop
例えば。
$ gsnd
GPL Ghostscript 9.06 (2012-08-08)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
GS>{1}loop
Error: /stackoverflow in 1
Operand stack:
--nostringval--
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- %loop_continue --nostringval-- --nostringval-- false 1 %stopped_push .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- %loop_continue
Dictionary stack:
--dict:1168/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 8
GS<1>
main=print$sum[1..999999]
sumは合計で遅延します。これはサンクの束を積み上げ、最後にそれらをすべて評価しようとするため、スタックオーバーフローが発生します。
\end\end
これは、この回答で使用されているのと同じコードです。基本的に、\endマクロはそれ自体を繰り返し展開し、スタックオーバーフローを引き起こしますTeX capacity exceeded, sorry [input stack size=5000]。詳細な説明はこちらをご覧ください。
for($n=1e5;$n--;)$a=(object)[$a];
これにより、ネストされたstdClassオブジェクトが自動的に破棄されると、スタックオーバーフローが発生します。
$ gdb -q php
Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
(gdb) set pagination 0
(gdb) r -nr 'for($n=1e5;$n--;)$a=(object)[$a];'
Starting program: /usr/bin/php -nr 'for($n=1e5;$n--;)$a=(object)[$a];'
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x00000000006debce in zend_objects_store_del_ref_by_handle_ex ()
(gdb) bt
#0 0x00000000006debce in zend_objects_store_del_ref_by_handle_ex ()
#1 0x00000000006dee73 in zend_objects_store_del_ref ()
#2 0x00000000006a91ca in _zval_ptr_dtor ()
#3 0x00000000006c5f78 in zend_hash_destroy ()
#4 0x00000000006d909c in zend_object_std_dtor ()
#5 0x00000000006d9129 in zend_objects_free_object_storage ()
#6 0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#7 0x00000000006dee73 in zend_objects_store_del_ref ()
#8 0x00000000006a91ca in _zval_ptr_dtor ()
#9 0x00000000006c5f78 in zend_hash_destroy ()
#10 0x00000000006d909c in zend_object_std_dtor ()
#11 0x00000000006d9129 in zend_objects_free_object_storage ()
[...]
#125694 0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#125695 0x00000000006dee73 in zend_objects_store_del_ref ()
#125696 0x00000000006a91ca in _zval_ptr_dtor ()
#125697 0x00000000006c5f78 in zend_hash_destroy ()
#125698 0x00000000006d909c in zend_object_std_dtor ()
#125699 0x00000000006d9129 in zend_objects_free_object_storage ()
#125700 0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#125701 0x00000000006dee73 in zend_objects_store_del_ref ()
#125702 0x00000000006a91ca in _zval_ptr_dtor ()
#125703 0x00000000006c4945 in ?? ()
#125704 0x00000000006c6481 in zend_hash_reverse_apply ()
#125705 0x00000000006a94e1 in ?? ()
#125706 0x00000000006b80e7 in ?? ()
#125707 0x0000000000657ae5 in php_request_shutdown ()
#125708 0x0000000000761a18 in ?? ()
#125709 0x000000000042c420 in ?? ()
#125710 0x00007ffff5b6976d in __libc_start_main (main=0x42bf50, argc=3, ubp_av=0x7fffffffe738, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe728) at libc-start.c:226
#125711 0x000000000042c4b5 in _start ()
同じスタイルの束:
(lambda x:x(x))(lambda y:y(y))
(function(x){x(x)})(function(y){y(y)})
(function(x) x(x) end)(function(y) y(y) end)
x=lambda y:y(y);x(x)では短い(20文字)。この関数は再帰的ではありません。xは、引数として渡された関数を呼び出します。
->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
32:ゲッターはあなたのマシンをC#で簡単にできます:
public int a{get{return a;}}
public int a {get{return a;}}
int a { get { return a; } }
(1)DO(1)NEXT
NEXTINTERCALのサブルーチン呼び出しのバージョン(または、少なくとも、取得できる最も近いバージョン)です。現在位置をNEXTスタックにプッシュし、指定されたラベルにジャンプします。
ただし、NEXTスタックの長さが80を超える場合、スタックオーバーフローのINTERCALバージョンとほぼ同じものが得られます。
ICL123I PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON
ON THE WAY TO 1
CORRECT SOURCE AND RESUBNIT
ラベルmainをジャンプターゲットとして使用していますが、これは再帰的な関数ではないことに注意してください。
.globl main
main:push $0;jmp main
dd 0fdeb6010文字!