โปรแกรมสั้นที่สุดที่พ่นข้อผิดพลาด StackOverflow [ปิด]


75

เขียนโปรแกรมที่ผิดพลาด StackOverflow หรือเทียบเท่าในภาษาที่ใช้ ยกตัวอย่างเช่นในJava , java.lang.StackOverflowErrorโปรแกรมควรโยน

คุณไม่ได้รับอนุญาตให้กำหนดฟังก์ชั่นที่เรียกตัวเองหรือคลาสใหม่ (ยกเว้นฟังก์ชันที่มีmainใน java) ควรใช้คลาสของภาษาการเขียนโปรแกรมที่เลือก

และไม่ควรโยนข้อผิดพลาดอย่างชัดเจน


4
ฉันไม่เข้าใจ "ใช้คลาสของภาษาการเขียนโปรแกรมที่เลือก"
เจ้าชายจอห์นเวสลีย์

3
มันตกลงหรือไม่ที่จะกำหนดฟังก์ชั่นที่เรียกใช้ฟังก์ชันภายในเช่นนี้def s{def t=s;t}?
เจ้าชายจอห์นเวสลีย์

12
ในภาษาส่วนใหญ่คลาสเป็นเพียงโครงสร้างข้อมูลชนิดพิเศษไม่ใช่ศูนย์กลางของจักรวาล หลายคนไม่ได้สิ่งนั้น
หยุดหมุนทวนเข็มนาฬิกาเมื่อ

1
สิ่งที่ตลกนี่คือภาษาที่ต้องใช้การกำจัดการเรียกซ้ำแบบหาง (และการใช้งานที่สนับสนุนเมื่อภาษาไม่ต้องการ) - ซึ่งเป็นความรู้สึกที่ดีจริง ๆ --- ที่เสียเปรียบในเรื่องนี้ TwiNight ตอบลิงก์ไปยังเวอร์ชั่นนี้ที่มีอยู่ใน Stack Overflow ตั้งแต่วันแรก ๆ
dmckee

1
จาก java doc: โยนทิ้งเมื่อเกิดโอเวอร์โฟลว์มากเกินไปเนื่องจากแอปพลิเคชันซ้ำลึกเกินไป docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

คำตอบ:


90

Befunge 1

ฉันไม่รู้ Befunge แต่ ...

1

จากสแต็กรหัสล้นกอล์ฟ


21
คำอธิบาย: 1 เป็นตัวอักษรตัวเลขที่ถูกส่งไปยังสแต็กเมื่อพบ ใน Befunge การควบคุมโฟลว์จะล้อมรอบจนกว่าจะพบ@กับเพื่อจบโปรแกรม
ชำนาญวิชาม ณ

6
ฉันไม่รู้ว่ามีคำถามนี้ใน StackOverflow ฉันค้นหาเฉพาะในเว็บไซต์นี้ก่อนโพสต์
True Soft

31
ฉันภูมิใจอย่างยิ่งที่จะเห็นคำตอบของฉันที่นี่
แพทริค

4
สิ่งนี้ใช้ได้ใน> <> ด้วย
Cruncher

49

Python (2.7.3), 35 ตัวอักษร

import sys
sys.setrecursionlimit(1)

การดำเนินการนี้ประสบความสำเร็จ แต่สคริปต์และการโต้ตอบจะส่งผลทันทีRuntimeError: 'maximum recursion depth exceeded'หลังจากนั้น

แรงบันดาลใจจากคำตอบของ elssar


ฉันคิดว่าจะใช้วิธีนี้แทน แต่ไม่แน่ใจว่าข้อผิดพลาดนั้นอาจถือได้ว่าเป็นสแตกล้น ถึงแม้ว่าโดยพื้นฐานแล้วมันคืออะไรใช่มั้ย
elssar

2
@elssar: ฉันเดาว่ามีสองวิธีในการล้นสแต็ก: ทำให้ส่วนที่ใช้ของสแต็กมีขนาดใหญ่ขึ้นหรือทำให้ส่วนที่ไม่ได้ใช้ของสแต็กมีขนาดเล็กลง หากคุณนึกภาพถังบรรจุน้ำคุณสามารถล้นด้วยการเติมน้ำมากขึ้น แต่คุณสามารถล้นได้ด้วยการลดขนาดถังลง

19

Coq

Compute 70000.

70000เป็นเพียงน้ำตาลประโยคสำหรับS (S ( ... (S O) ...))กับ 70000 S'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).

2
ที่อาจทำให้คุณคิดว่า Coq เป็นภาษาที่โง่อย่างไม่น่าเชื่อ ... ตลก ...
หยุดหัน counterclock ซึ่งเป็น

1
@leftaroundabout ที่จริงแล้วไม่ได้ ประเภท Nat เป็นตัวเลขระดับ peano ที่ต้องทำเสมือนเป็นรายการที่เชื่อมโยง
FUZxxl

1
@FUZxxl: ความคิดเห็นของฉันไม่ได้แปลว่าแดกดันเลย ตัดสินใจด้วยตัวเองหากคุณต้องการรวมตรรกะคลาสสิกไว้ในประโยคนั้นหรือต้องการที่จะอยู่อย่างสร้างสรรค์ ...
หยุดที่จะเปลี่ยน counterclock ซึ่งเป็น

2
@leftaroundabout โอ๊ะโอ ... ขออภัย ฉันลืมว่าตัวแยกวิเคราะห์มาร์คดาวน์จะกินสิ่งที่ดี & lt; irony & gt; -tags
FUZxxl

19

Java - 35

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

OP ไม่ได้บอกว่าไม่มีคลาสใหม่หรือ ฉันไม่เห็นข้างpublic static void mainใน หรือฉันแค่ไม่เข้าใจ Java
Braden สุดยอด

4
@ B1KMusic ไม่มีคลาสใหม่มีเพียงคลาสเดียวเท่านั้น รหัสใช้ตัวเริ่มต้นคงที่มันจะโยน SO ก่อนที่ตัวเลข jvm ออกมาไม่มีวิธีการหลัก ทำงานร่วมกับ java 6
aditsu

1
ฉันเข้าใจบล็อกแบบคงที่ แต่บล็อกถัดไปคืออะไร
Nicolas Barbulesco

1
@NicolasBarbulesco นั่นเป็นบล็อกเริ่มต้นมันถูกดำเนินการเมื่อคุณสร้างอินสแตนซ์ใหม่
aditsu

1
@LuigiCortese ฉันคิดว่ามันใช้ได้กับ java 6 หรือเก่ากว่าเท่านั้น
aditsu

19

Javascript 24 ตัวอักษร

คำตอบขึ้นอยู่กับเบราว์เซอร์ (ต้องเข้าถึงapply):

eval.apply(0,Array(999999))
  • eval ชื่อฟังก์ชันสากลที่สั้นที่สุดที่ฉันสามารถหาได้ (ใครก็ตามที่รู้จักชื่อที่สั้นกว่านี้)
  • applyช่วยให้เราสามารถแปลงอาร์เรย์เป็นพารามิเตอร์ฟังก์ชั่นพารามิเตอร์แรกเป็นบริบทของฟังก์ชั่น ( this)
  • Array(999999)จะสร้างอาร์เรย์ที่มีความยาวที่ระบุไว้ ไม่แน่ใจว่าจำนวนอาร์กิวเมนต์สูงสุดคืออะไร แต่น้อยกว่านี้และมากกว่านั้น99999

IE9:

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(;;);

ไม่มีคุณสมบัติเหล่านี้

อัปเดต - นี่เป็นการลบอักขระสามตัว:

eval.apply(0,Array(1e7))

MDN บอกว่าevalสั้นที่สุด
ปีเตอร์เทย์เลอร์

5
eval.apply(0,Array(1e6))ประหยัด 3 ตัวอักษรคุณสามารถไปได้โดย9e9ไม่มีค่าใช้จ่าย
ThinkChaos

1
applyเป็นคุณสมบัติ ECMAScript มาตรฐาน ไม่มีอะไรขึ้นอยู่กับเบราว์เซอร์ เว้นแต่ว่าคุณกำลังพูดถึงเบราว์เซอร์ที่เก่าแก่จริงๆ แต่สิ่งนี้จะไม่สามารถใช้งานได้ในสมมุติฐาน Netscape 2 ด้วยapplyอย่างไรก็ตามเนื่องจากArrayคลาสไม่มีอยู่ใน Netscape 2
Konrad Borowski

1
ใหม่สั้นที่สุดใน ES6:eval(...Array(9e9))
Patrick Roberts

1
อาจไม่ได้มาตรฐานใช้ Chrome ในคอนโซล dir.apply(0,Array(1e7));
พอลเจ

17

Python 2.7 (12 ตัวอักษร)

exec('{'*99)

ผลลัพธ์ใน« s_push: parser stack overflow »


4
ฉันได้รับSyntaxError: unexpected EOF while parsing
Martin Thoma

1
กับที่exec('{'*101)ฉันได้รับMemoryError
Martin Thoma

4
ใน Python2 execเป็นคำสั่งดังนั้นคุณสามารถใช้exec'{'*999(99 ดูเหมือนจะไม่เพียงพอ)
gnibbler

คุณต้องมีอย่างน้อย 100 เพื่อเรียกใช้ MemoryError และ≠สแต็คล้น
noɥʇʎԀʎzɐɹƆ

13

Mathematica, 4 ตัวอักษร

x=2x

$ RecursionLimit :: reclim: มีความลึกในการเรียกซ้ำเกิน 1024 >>


1
"คุณไม่สามารถกำหนดฟังก์ชั่นที่เรียกตัวเองได้"
Tomas

13
นั่นไม่ใช่ฟังก์ชั่นมันเป็นตัวแปร (ยกเว้นว่ามันจะไม่เหมือนที่มันเป็น)
AMK

คุณเอาความคิดของฉัน
PyRulez

12

Clojure 12 ตัวอักษร

(#(%%)#(%%))

ทำงานในแบบจำลอง:

user=> (#(%%)#(%%))
StackOverflowError   user/eval404/fn--407 (NO_SOURCE_FILE:1)

สิ่งนี้ทำให้ผมนึกถึงการแสดงออกของแคลคูลัสแลมบ์ดา(\x.xx)(\x.xx)แต่ฉันไม่รู้ว่าจะพูดจาดีพอที่จะบอกได้อย่างแน่นอนว่านี่เป็นสิ่งที่เกิดขึ้น ฉันยังไม่เห็นว่าทำไมการแสดงออกดังกล่าวจะส่งผลให้เกิดการล้นสแต็คดังนั้นบางทีคุณอาจทำกลโกงด้วย Y-combinator? คำตอบนี้สนใจฉันและคำอธิบายจะดี
Zwei

12

Java - 113 ตัวอักษร

ฉันคิดว่าสิ่งนี้อยู่ภายในจิตวิญญาณของกฎ "ไม่มีวิธีการเรียกตนเอง" มันไม่ได้ทำอย่างชัดเจนและมันยังผ่านการสร้างภาษา 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();}}

9
ดี""+thisที่เป็นจริง""+this.toString()ดังนั้นวิธีการที่เรียกตัวเอง
True Soft

1
@TrueSoft ค่อนข้างแน่ใจว่าจาวามีStringBuilderวัตถุอยู่ในนั้น toStringมีแนวโน้มที่จะถูกเรียกจากภายใน
Cruncher

1
เมื่อถึงเวลาที่คอมไพเลอร์และเพิ่มประสิทธิภาพจะทำในtoString()วิธีการสิ้นสุดขึ้นเป็นpublic java.lang.String toString() { return this.toString(); }
โจนาธาน Callen

12

C, 19 ไบต์

main(){int i[~0u];}

4
@Thomas ใช่มันเป็น stack overflow บนเครื่องที่มีการจัดสรรตัวแปรโลคัลใน stack เนื่องจากภาษา C ไม่มีแนวคิดของตัวบ่งชี้การโอเวอร์โฟลว์สแต็ก (เป็นพฤติกรรมที่ไม่ได้กำหนดทั้งหมดซึ่งหนึ่งในนั้นแสดงให้เห็นว่าเป็น segfault) สิ่งนี้จึงเหมาะสมกับความต้องการดั้งเดิม
Jens

ตกลงขอโทษได้รับการยอมรับ
โทมัส

3
มันให้main.c:1:16: error: size of array 'i' is negativeสำหรับฉันใน gcc 4.8.1 รุ่นที่ไม่ได้ลงนามใช้main(){int i[~0U];}งานได้
Csq

ไม่ทำงานสำหรับฉันหลังจากฉันกำหนดค่า 4GB stack ด้วยตนเอง
FUZxxl

@FUZxxl น่าสนใจ; ints 32 บิตของคุณหรือไม่ ถ้าเป็นเช่นนั้นsizeof(i)คือ 16GB การใช้ulหรือullคำต่อท้ายสร้างความแตกต่างหรือไม่? ระบบบางหน่วยความจำเกินหน่วยความจำและผิดพลาดเฉพาะถ้าหน่วยความจำถูกเขียนไป
Jens

10

GolfScript (8 ตัวอักษร)

{]}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)
ProgramFOX

@ProgramFOX จะมีค่าบางส่วนที่คุณสามารถแทนที่333ด้วยและจะทำลาย 333เป็นค่าที่น้อยที่สุดซึ่งทำลายสำหรับฉัน แต่ถ้าคุณมี Ruby รุ่นอื่น (หรืออาจเป็นรุ่นเดียวกันใน OS อื่นที่ฉันรู้) มันอาจจัดการกับจำนวน stack stack ที่แตกต่างกันก่อนที่จะล้น
ปีเตอร์เทย์เลอร์

1
พักที่ 3192 ในเครื่องของฉันดังนั้น6.?ยังใช้งานได้โดยไม่ต้องเพิ่มตัวอักษร
Dennis

10

ชุดประกอบ x86 ไวยากรณ์ของ NASM ขนาด 7 ไบต์

db"Pëý"

"Pëý" คือ 50 EB FD ในเลขฐานสิบหกและ

_loop:
push eax
jmp _loop

ในการชุมนุม x86


8

ทับทิม, 12

eval"[]"*9e3

จะช่วยให้

SystemStackError: stack level too deep

ขึ้นอยู่กับระบบว่าน่าจะเป็นไปได้ แต่คุณสามารถเพิ่มคำสั่งของขนาดด้วยการชนตัวเลขสุดท้ายขึ้น (ไม่แนะนำ)

แก้ไขสำหรับคำอธิบาย: ในทำนองเดียวกันกับตัวอย่างอื่น ๆ สิ่งนี้จะสร้างสตริงของ[][][]... ซ้ำ 9000 ครั้งจากนั้นประเมินมัน: ด้านขวาสุด[]จะถูกแจงเป็นฟังก์ชั่นการโทรไปยังที่เหลือและอื่น ๆ หากถึงจุดเริ่มต้นจริง ๆ ก็จะโยน ArgumentError เพราะ[]เป็นวัตถุที่มี[]วิธีการที่ต้องการอาร์กิวเมนต์หนึ่ง แต่เครื่องของฉันพ่นข้อผิดพลาดเล็กน้อยก่อนที่สแต็กจะมากกว่าเก้าพัน


อืม ... เกิดข้อผิดพลาด IRB: P
Doorknob

เวอร์ชันไหน ruby1.9.2 พ่น“ ArgumentError: จำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง (0 สำหรับ 1..2)”
จัดการ

พบruby1.8.7 เก่า มีรหัสโพสต์ทำงานตามที่อธิบายไว้
จัดการ

มันใช้งานได้กับ 1.8.7, 1.9.2 และ 1.9.3 ของฉัน
ฮิสโทแกต

ผมจะได้กล่าวว่าdef f;f;end;f
EMBLEM

8

Rebol (11 ตัวอักษร)

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

เราสามารถตรวจสอบคำถาม"อะไรคือ S"ด้วย REPL:

>> s: [do s]
== [do s]

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

อย่าเปลี่ยนสิ่งนี้เป็นฟังก์ชั่นโดยจะเรียกผู้ประเมินในสภาพแวดล้อมปัจจุบันของโครงสร้าง


1
+1 ... ฉันไม่ได้สังเกตว่าคำตอบของฉันกำหนดฟังก์ชั่นและขัดต่อกฎ แต่แก้ไขคำตอบของฉันที่จะใช้ DO ... จากนั้นสังเกตว่าคุณส่งคำตอบแล้ว ดังนั้นฉันเพิ่งลบของฉัน แต่เนื่องจากฉันเขียนขึ้นมาว่าทำไมมันไม่ได้กำหนดวัตถุ / ฟังก์ชั่น / การปิดฉันคิดว่าฉันจะใส่คำอธิบายลงในของคุณ นอกจากนี้ฉันคิดว่าสิ่งที่ต้องทำคือความสนุกและความคุ้มค่า :-) หวังว่าจะโอเค!
ดร. Rebmu

7

C, 35 ตัวอักษร

main(){for(;;)*(int*)alloca(1)=0;}

ทำไมต้องเก็บอะไรไว้ในพื้นที่ที่กำหนด?
Peter Taylor

1
ในกรณีนี้เป็นไปไม่ได้ที่จะแก้ปัญหานี้ใน C.
FUZxxl

3
@dmckee ไม่ใช่ความผิดของการแบ่งกลุ่มทั้งหมดเป็นแบบล้นสแต็ก แต่ฉันบอกว่าอันนี้เป็นเพราะมันเป็นผลมาจากความจุกองซ้อน
ugoren

1
@dmckee จัดสรรจัดสรรจากสแต็ก
ugoren

1
@PeterTaylor: มันอาจขึ้นอยู่กับการนำไปใช้ แต่ในกรณีของฉันalloca(1)ถูกแปลเป็นพื้นsub $1, %espเพื่อที่จะไม่ได้สัมผัสสแต็ก
งาน

7

เสียงกระเพื่อมสามัญ 7 ตัว

#1='#1#

สวย ... ฉันกำลังวางแผนที่จะใช้#1=(#1#)สำหรับอาคารผู้โดยสารและ(print #1=(#1#))แต่ทางออกของคุณดีกว่ามาก
ประท้วง

จริงๆแล้วมันไม่ได้ล้นในเวลาอ่านเฉพาะเมื่อคุณพยายามที่จะพิมพ์ ดังนั้นนอกเหนือจากความแตกต่างของตัวละคร 1 ตัวคุณก็ไม่ได้ดีไปกว่านี้อีกแล้ว
protist

คุณพูดถูก ฉันไม่แน่ใจว่ามีวิธีที่จะทำให้เกิดการล้นในเวลาอ่าน
Erik Haliewicz

. จริง # # # # 1 = '# 1 # ทำให้เกิดการล้น :-) อ่านเวลา
เอริค Haliewicz

7

Python 11 ตัวอักษร

exec'('*999

>>> exec'('*999
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

ทางออกที่ฉลาดมาก
mbomb007

7

เครื่องคิดเลขคาสิโอ 11 ปุ่มกด

มันค่อนข้างยากที่จะนับไบต์ / โทเค็นใน "ภาษา" นี้ - ฉันได้รับจำนวนของการกดปุ่มที่ต้องการไม่รวม Shift, Alpha (ปุ่ม Shift ที่สอง) และ =ในตอนท้าย - นี่เหมาะอย่างยิ่งกับ 1 ไบต์ต่อการกดแป้น

ทดสอบกับfx-85GT PLUSซึ่งเป็นเครื่องคิดเลขวิทยาศาสตร์แบบมาตรฐานไม่ใช่กราฟโปรแกรมที่ไม่สามารถตั้งโปรแกรมได้ รุ่นอื่น ๆ จะใช้งานได้

เพียงสแต็ครูท 11 คิวบ์:

3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√

มันไม่ได้ให้ข้อผิดพลาดทางไวยากรณ์เกี่ยวกับตัวเลขที่หายไปภายใต้สแควร์รูท

ดูเหมือนจะไม่ทำงานกับรากที่สอง

หรือทำซ้ำ cos( 31 ครั้ง

เอาท์พุต

Stack ERROR

[AC]  :Cancel
[<][>]:Goto

ฉันเชื่อว่าสิ่งนี้มีคุณสมบัติเป็นกองล้น สแต็คดูเหมือนจะเล็ก ...


ฉันมักจะคิดว่ามันถูกเรียกว่าข้อผิดพลาดสแต็คเพราะคุณ "รากซ้อนกัน" รากมากเกินไป: P
FlipTack

เครื่องคิดเลข Canon ของฉันให้ข้อผิดพลาดแบบสแต็กที่มีตัวดำเนินการใด ๆ (ยกเว้นอย่างน้อย +, -, * และ /) หากทำซ้ำ 25 ครั้งขึ้นไป ตัวอย่างเช่นสิ่งนี้ทำให้เกิดข้อผิดพลาดของสแต็ก (ไม่มีข้อผิดพลาดทางไวยากรณ์):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 ไบต์

BEGIN 1 AGAIN

ล้นสแต็กค่า


: X X ; X(9) ต้องโอเวอร์โฟลว์คืนสแต็ก
AMK

ไม่ทำงาน (X ไม่ได้ถูกกำหนดในขณะที่กำหนดการโทรและนั่นคือการอ้างอิง / เรียกตนเองซ้ำ
ratchet freak

@ ratchetfreak คำควบคุมเหล่านั้นสามารถใช้ในสถานะการคอมไพล์เท่านั้นดังนั้นจึงจำเป็นต้องห่อคำนิยาม:... ;คำ ที่เพิ่มอย่างน้อย 6 ตัวอักษรรวมทั้งอย่างน้อย 2 ตัวเพื่อดำเนินการเป็นโปรแกรม คุณอาจจะสามารถที่จะทำมันสั้น : F BEGIN 1 AGAIN ; Fแต่ที่นี่คือตัวอย่าง: ฉันแนะนำสิ่งนี้เพราะคำถามถามว่า: "เขียนโปรแกรม" ยังไงก็ตามคุณได้ให้การสนับสนุน Forth สำหรับคุณโดยไม่คำนึงถึงจำนวนถ่าน! :-)
Darren Stone

6

Postscript, 7

{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>

6

Haskell (GHC ไม่มีการเพิ่มประสิทธิภาพ), 25

main=print$sum[1..999999]

ผลรวมนั้นขี้เกียจ สิ่งนี้จะซ้อนกันเป็นก้อน ๆ จากนั้นพยายามประเมินพวกมันทั้งหมดในตอนท้าย


ฉันมักจะคิดว่าผลรวมถูกนำมาใช้โดยใช้ foldl ' ไม่ใช่เหรอ
ภูมิใจ Haskeller


6

LaTeX: 8 ตัวอักษร

\end\end

นี่เป็นรหัสเดียวกับที่ใช้ในคำตอบนี้ โดยพื้นฐานแล้ว\endแมโครขยายตัวเองซ้ำ ๆ TeX capacity exceeded, sorry [input stack size=5000]ที่เกิดขึ้นในกองล้น: คำอธิบายรายละเอียดเพิ่มเติมสามารถพบได้ที่นี่


5

PHP 5.4, 33 ตัวอักษร

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 ()

2
+1 สำหรับสิ่งที่จะต้องมีลักษณะที่สองของ PHP ใน CodeGolf!
Bojangles

5

Q / k (16 ตัวอักษร)

ไม่แน่ใจว่าสิ่งนี้อยู่ในจิตวิญญาณของความท้าทาย แต่ฉันไม่คิดว่ามันจะผิดกฎ:

s:{f`};f:{s`};f`

มันเป็นความอัปยศ C # ต้องการการพิมพ์มากคุณได้รับคำตอบของฉัน!
Andrew Gray

5

พวงในสไตล์เดียวกัน:

Python 30

(lambda x:x(x))(lambda y:y(y))

Javascript, 38

(function(x){x(x)})(function(y){y(y)})

ลัวะอายุ 44 ปี

(function(x) x(x) end)(function(y) y(y) end)

ใน Python x=lambda y:y(y);x(x)สั้นกว่า (20 chars) ฟังก์ชั่นนี้ไม่ได้เรียกซ้ำ x เรียกใช้ฟังก์ชันใด ๆ ที่ส่งผ่านไปเป็นอาร์กิวเมนต์
AMK

Ruby 2.0 -->x{x[x]}[->y{y[y]}]
John Dvorak

Mathematica#@#&[#@#&]
alephalpha

คุณเพิ่งใช้การเรียกซ้ำแล้วทำเช่นนั้นทำไมไม่ทำเช่นนั้นใน JS: (function x () {x ()}) ()?
xem

@ ข้อกำหนด xem บอกว่าไม่มีการสอบถามซ้ำซึ่งเป็นสาเหตุ
แดนนี่

5

C #: 106 86 58 46 32 28

32 : Getters สามารถทำให้เครื่องของคุณง่ายใน C #:

public int a{get{return a;}}

1
ไม่จำเป็นต้องตั้งค่าไว้public int a {get{return a;}}
Mike Koder

3
สิ่งนี้ละเมิดกฎ "คุณไม่ได้รับอนุญาตให้กำหนดฟังก์ชั่นที่เรียกตัวเอง" เป็นที่ยอมรับกันว่าซ่อนอยู่หลังไวยากรณ์น้ำตาล แต่ก็ยังขาดจุดที่ท้าทาย
Peter Taylor

การเพิ่มตัวตั้งค่าค่อนข้างจะเลี่ยงกฎเพราะตอนนี้คุณมีสองฟังก์ชั่นที่เรียกซึ่งกันและกัน แต่ฉันสงสัยว่า: นั่นยังละเมิดความตั้งใจของ OP อยู่เบื้องหลังการท้าทายนี้หรือไม่?
Andrew Gray

1
แนวคิดที่ฉันเข้าใจคือการค้นหาการเรียกซ้ำซ้อนที่มากเกินไปในล่ามหรือ API มาตรฐานของภาษา สิ่งนี้อาจไม่ง่ายเกินไปใน C #
Peter Taylor

1
ทำไม "สตริงสาธารณะ" "int" ก็ใช้ได้เช่นกัน:int a { get { return a; } }
NPSF3000

5

INTERCAL 12 ไบต์

(1)DO(1)NEXT

คำอธิบาย:

NEXTคือรุ่นของการเรียกรูทีนย่อยของ INTERCAL (หรืออย่างน้อยที่สุดคุณก็จะได้ใกล้เคียงที่สุด) มันผลักตำแหน่งปัจจุบันลงบนNEXTสแต็กและข้ามไปยังป้ายกำกับที่กำหนด

อย่างไรก็ตามหากNEXTความยาวของสแต็กเกิน 80 คุณจะได้รับอะไรมากเกินไปรุ่น INTERCAL ของสแต็คล้น:

ICL123I PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON
    ON THE WAY TO 1
        CORRECT SOURCE AND RESUBNIT

ลองใช้กับ Ideone .


6
"หมดความรู้สึกไปสู่ความกล้าหาญของดำ" นี่คืออะไรอาร์โนลด์?
Addison Crump

5

Mornington Crescent, 139 133

Take Northern Line to Bank
Take Circle Line to Temple
Take Circle Line to Temple
Take Circle Line to Bank
Take Northern Line to Angel

4

ชุดประกอบ X86 (AT&T) 33 ตัว

โปรดทราบว่าแม้ว่าฉันจะใช้ป้ายกำกับmainเป็นเป้าหมายการกระโดด แต่นี่ไม่ใช่ฟังก์ชันแบบเรียกซ้ำ

.globl main
main:push $0;jmp main

ความคิดที่ดี: นี่คือการเรียงลำดับของการเรียกซ้ำโดยไม่เรียกซ้ำ!
Andrea Corbellini

ใช้ a86: dd 0fdeb6010 ตัวละคร!
Skizz

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.