Chương trình ngắn nhất ném lỗi StackOverflow [đã đóng]


75

Viết chương trình đưa ra lỗi StackOverflow hoặc tương đương trong ngôn ngữ được sử dụng. Ví dụ, trong java , chương trình nên ném java.lang.StackOverflowError.

Bạn không được phép định nghĩa một hàm gọi chính nó hoặc một lớp mới (ngoại trừ hàm có maintrong java). Nó nên sử dụng các lớp của ngôn ngữ lập trình đã chọn.

Và nó không nên ném lỗi rõ ràng.


4
Tôi không hiểu "sử dụng các lớp của ngôn ngữ lập trình đã chọn"
Hoàng tử John Wesley

3
Có ổn không khi định nghĩa một hàm gọi hàm bên trong như thế này def s{def t=s;t}?
Hoàng tử John Wesley

12
Trong hầu hết các ngôn ngữ, các lớp chỉ là một loại cấu trúc dữ liệu đặc biệt, không phải là trung tâm của vũ trụ. Nhiều người thậm chí không một điều như vậy.
đã ngừng quay ngược chiều

1
Điều buồn cười ở đây là các ngôn ngữ yêu cầu loại bỏ đệ quy đuôi (và các triển khai hỗ trợ nó khi các ngôn ngữ không yêu cầu nó) --- theo nghĩa rất tốt hơn --- là bất lợi về điều này. Câu trả lời của TwiNight liên kết đến phiên bản này tồn tại trên Stack Overflow từ những ngày đầu.
dmckee

1
Từ tài liệu java: Ném khi xảy ra tràn ngăn xếp vì một ứng dụng đệ quy quá sâu. docs.oracle.com/javase/6/docs/api/java/lang/ triệt
jsedano

Câu trả lời:


90

Befunge, 1

Tôi không biết Befunge, nhưng ...

1

từ Stack tràn mã golf


21
Giải thích: 1 là một chữ số được đẩy lên ngăn xếp khi gặp phải. Trong Befunge, điều khiển luồng kết thúc tốt đẹp cho đến khi gặp phải @để kết thúc chương trình.
lịch sử

6
Tôi không biết có câu hỏi này trên StackOverflow. Tôi chỉ tìm kiếm trên trang web này trước khi đăng.
True Soft

31
Tôi rất hãnh diện khi thấy câu trả lời của tôi ở đây.
Patrick

4
Điều này hoạt động trong> <> quá.
Cruncher

49

Python (2.7.3), 35 ký tự

import sys
sys.setrecursionlimit(1)

Hoạt động này tự thành công, nhưng cả kịch bản và tương tác sẽ ngay lập tức bị ném RuntimeError: 'maximum recursion depth exceeded'sau đó.

Lấy cảm hứng từ câu trả lời của elssar.


Tôi đã nghĩ về việc đưa nó lên làm giải pháp thay thế, nhưng không chắc là lỗi có thể được coi là tràn ngăn xếp hay không. Mặc dù, về cơ bản, đó là những gì nó, phải không?
elssar

2
@elssar: Tôi đoán có hai cách để tràn ngăn xếp: làm cho phần được sử dụng của ngăn xếp lớn hơn hoặc làm cho phần không sử dụng của ngăn xếp nhỏ hơn. Nếu bạn tưởng tượng một cái xô chứa đầy nước, bạn có thể làm tràn nó bằng cách thêm nhiều nước hơn, nhưng bạn cũng có thể làm tràn nó bằng cách thu nhỏ xô.

19

Coq

Compute 70000.

70000chỉ là cú pháp đường S (S ( ... (S O) ...))với 70000 S's. Tôi nghĩ rằng đó là trình kiểm tra loại gây ra tràn ngăn xếp.

Đây là một cảnh báo được in trước khi lệnh được thực thi:

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
Điều đó có thể cho phép bạn nghĩ Coq là một ngôn ngữ cực kỳ ngu ngốc ... buồn cười ...
đã ngừng quay ngược lại vào

1
@leftaroundabout Thật ra không phải. Loại Nat là một số peano cấp độ loại phải hoạt động như thể nó là một danh sách liên kết.
FUZxxl

1
@FUZxxl: bình luận của tôi không có ý mỉa mai chút nào. Tự quyết định nếu bạn muốn đưa logic cổ điển vào câu đó hoặc thích duy trì tính xây dựng ...
đã ngừng quay ngược lại vào

2
@leftaroundabout Rất tiếc ... xin lỗi. Tôi quên rằng trình phân tích cú pháp đánh dấu luôn ăn những thứ & lt; trớ trêu & gt; tốt đẹp đó.
FUZxxl

19

Java - 35

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

Không phải OP nói không có lớp mới sao? Tôi không thấy một public static void maintrong đó. Hay tôi chỉ không hiểu Java?
Braden hay nhất

4
@ B1KMusic Không có lớp mới, chỉ có một lớp (S). Mã sử ​​dụng một trình khởi tạo tĩnh, nó ném SO trước khi jvm chỉ ra rằng không có phương thức chính. Hoạt động với java 6.
aditsu 5/214

1
Tôi hiểu khối tĩnh. Nhưng khối tiếp theo là gì?
Nicolas Barbulesco

1
@NicolasBarbulesco Đó là một khối khởi tạo, nó được thực thi khi bạn xây dựng một thể hiện mới.
aditsu

1
@LuigiCortese Tôi nghĩ rằng nó chỉ hoạt động với java 6 trở lên
aditsu

19

Javascript 24 ký tự

Câu trả lời phụ thuộc vào trình duyệt (phải có quyền truy cập apply):

eval.apply(0,Array(999999))
  • eval là tên hàm toàn cầu ngắn nhất mà tôi có thể tìm thấy (có ai biết tên nào ngắn hơn không?)
  • applycho phép chúng ta chuyển đổi một mảng thành các tham số hàm, tham số đầu tiên là bối cảnh của hàm ( this)
  • Array(999999)sẽ tạo ra một mảng với chiều dài được liệt kê. Không chắc chắn số lượng đối số tối đa là bao nhiêu, nhưng nó ít hơn thế này và hơn99999

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

Lưu ý - Do tính chất luồng đơn của javascript, các vòng lặp vô hạn cuối cùng sẽ khóa UI và không bao giờ ném ngoại lệ.

while(1);
for(;;);

Không ai trong số này đủ điều kiện.

Cập nhật - điều này giúp loại bỏ ba ký tự:

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

MDN nói rằng đó evallà ngắn nhất.
Peter Taylor

5
eval.apply(0,Array(1e6))tiết kiệm 3 ký tự, thậm chí bạn có thể đi với 9e9miễn phí
ThinkChaos

1
applylà một tính năng ECMAScript tiêu chuẩn. Không có gì phụ thuộc vào trình duyệt. Trừ khi bạn đang nói về các trình duyệt thực sự cũ, nhưng dù sao thì điều này sẽ không hoạt động trong Netscape 2 giả thuyết apply, bởi vì Arraylớp không tồn tại trong Netscape 2.
Konrad Borowski

1
ngắn nhất mới trong ES6:eval(...Array(9e9))
Patrick Roberts

1
Có lẽ là không chuẩn, ném vào Chrome từ bảng điều khiển. dir.apply(0,Array(1e7));
Paul J

17

Python 2.7 (12 ký tự)

exec('{'*99)

dẫn đến một «s_push: tràn ngăn xếp trình phân tích cú pháp»


4
Tôi nhận đượcSyntaxError: unexpected EOF while parsing
Martin Thoma

1
Với exec('{'*101)tôi nhận đượcMemoryError
Martin Thoma

4
Trong Python2, execlà một câu lệnh, vì vậy bạn chỉ có thể sử dụng exec'{'*999(99 dường như không đủ)
gnibbler

Bạn cần ít nhất 100 để kích hoạt MemoryError. Và đó là tràn ngăn xếp
nozɐɹƆ

13

Toán học, 4 ký tự

x=2x

$ RecursionLimit :: reclim: Đã vượt quá độ sâu đệ quy 1024. >>


1
"Bạn có thể không xác định chức năng tự gọi mình"
Tomas

13
Đó không phải là một chức năng, nó là một biến số (trừ khi nó không giống như tất cả những gì nó trông giống như vậy).
AMK

Bạn lấy ý tưởng của tôi.
PyRulez

12

Clojure, 12 ký tự

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

Chạy trong thay thế:

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

Điều này nhắc nhở tôi về biểu thức tính toán lambda (\x.xx)(\x.xx), nhưng tôi không biết rõ về clojure đủ để nói chắc chắn nếu đây là những gì đang xảy ra. Tôi cũng không thấy lý do tại sao biểu thức nói trên sẽ dẫn đến tràn ngăn xếp, vì vậy có lẽ bạn đang thực hiện một số mánh khóe với trình kết hợp Y? Câu trả lời này làm tôi quan tâm và một lời giải thích sẽ tốt đẹp.
Zwei

12

Java - 113 ký tự

Tôi nghĩ rằng điều này nằm trong tinh thần của quy tắc "không có phương thức tự gọi". Nó không làm điều đó một cách rõ ràng và thậm chí nó còn đi qua một cấu trúc ngôn ngữ Java.

public class S {
    public String toString() {
        return ""+this;
    }
    public static void main(String[] a) {
        new S().toString();
    }
}

Phiên bản thu gọn:

public class S{public String toString(){return ""+this;}public static void main(String[] a){new S().toString();}}

9
Vâng, ""+thisthực sự là ""+this.toString()vậy, nên phương thức gọi chính nó.
True Soft

1
@TrueSoft Khá chắc chắn java ném vào một StringBuilderđối tượng ở đó. toStringsẽ có khả năng được gọi từ bên trong đó.
Cruncher

1
Vào thời điểm trình biên dịch và trình tối ưu hóa hoàn tất, toString()phương thức kết thúc làpublic java.lang.String toString() { return this.toString(); }
Jonathan Callen

12

C, 19 byte

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

4
@Thomas Có, đó một tràn ngăn xếp trên bất kỳ máy nào có các biến cục bộ được phân bổ trên ngăn xếp. Vì ngôn ngữ C không có khái niệm về dấu hiệu tràn ngăn xếp (tất cả đều là hành vi không xác định; một trong số chúng biểu hiện dưới dạng segfault), nên điều này không phù hợp với yêu cầu ban đầu.
Jens

OK, xin lỗi, chấp nhận.
Tomas

3
nó mang lại main.c:1:16: error: size of array 'i' is negativecho tôi trên gcc 4.8.1. Phiên bản chưa ký main(){int i[~0U];}hoạt động.
Csq

Không hoạt động với tôi sau khi tôi tự cấu hình ngăn xếp 4GB.
FUZxxl

@FUZxxl Thú vị; ints của bạn là 32 bit? Nếu vậy, sizeof(i)là 16GB. Liệu sử dụng một hậu tố ulhoặc ulllàm cho một sự khác biệt? Một số hệ thống cam kết quá mức bộ nhớ và chỉ bị sập nếu bộ nhớ được ghi vào.
Jens

10

GolfScript (8 ký tự)

{]}333*`

Kết quả:

$ 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

Về cơ bản, điều này tạo ra một cấu trúc dữ liệu được lồng rất nhiều và sau đó tràn vào ngăn xếp khi cố gắng biến nó thành một chuỗi.


Đối với tôi, điều này không gây ra lỗi, nhưng kết quả đầu ra[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
Chương trìnhFOX

@ProgramFOX, sẽ có một số giá trị mà bạn có thể thay thế 333và nó sẽ bị hỏng . 333là giá trị nhỏ nhất đã phá vỡ đối với tôi, nhưng nếu bạn có một phiên bản Ruby khác (hoặc có thể là cùng một phiên bản trên một hệ điều hành khác, đối với tất cả những gì tôi biết), nó có thể xử lý một số khung stack khác nhau trước khi tràn.
Peter Taylor

1
Nghỉ ở 3192 trên máy của tôi, vì vậy 6.?vẫn hoạt động mà không cần thêm ký tự.
Dennis

10

lắp ráp x86, cú pháp NASM, 7 byte

db"Pëý"

"Pëý" là 50 EB FD theo hệ thập lục phân và

_loop:
push eax
jmp _loop

trong lắp ráp x86.


8

Ruby, 12

eval"[]"*9e3

Tặng

SystemStackError: stack level too deep

Có thể phụ thuộc vào hệ thống, nhưng bạn có thể thêm các đơn đặt hàng cường độ bằng cách đưa chữ số cuối lên (không được khuyến nghị).

Chỉnh sửa để giải thích: Tương tự như một số ví dụ khác, điều này tạo ra một chuỗi [][][]... lặp đi lặp lại 9000 lần, sau đó đánh giá nó: phần ngoài cùng bên phải []được phân tích cú pháp như một lệnh gọi hàm còn lại, v.v. Nếu nó thực sự bắt đầu, nó sẽ ném ArgumentError vì []là một đối tượng có []phương thức yêu cầu một đối số, nhưng máy của tôi sẽ ném một lỗi một chút trước khi ngăn xếp hơn chín nghìn.


hmm ... đã bị rơi IRB: P
Doorknob

Phiên bản nào? ruby1.9.2 ném đối số của đối tượngError: sai số lượng đối số (0 cho 1..2).
manatwork

Tìm thấy một bản ruby1.8.7 cũ . Có mã được đăng hoạt động như mô tả.
manatwork

Kì lạ, nó hoạt động trên 1.8.7, 1.9.2 và 1.9.3 của tôi.
lịch sử

Tôi đã có thể nóidef f;f;end;f
EMBLEM

8

Rebol (11 ký tự)

do s:[do s]

Sản lượng:

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

Mặc dù Rebol có chức năng, đóng và đối tượng ... điều này không định nghĩa bất kỳ thứ nào trong số đó. Nó định nghĩa một cấu trúc dữ liệu, trong mô hình mã dưới dạng dữ liệu có thể được coi là mã bằng DO.

Chúng ta có thể thăm dò câu hỏi "S là gì" với REPL:

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

DO không bao giờ biến điều này thành một hàm, nó gọi trình đánh giá trong môi trường hiện tại trên cấu trúc.


1
+1 ... Tôi đã không nhận thấy rằng câu trả lời của tôi là xác định hàm và điều đó trái với quy tắc, nhưng đã chỉnh sửa câu trả lời của tôi để sử dụng DO ... sau đó nhận thấy bạn đã gửi câu trả lời đó. Vì vậy, tôi vừa xóa cái của tôi, nhưng vì tôi đã viết ra lý do tại sao điều này không xác định một đối tượng / chức năng / đóng cửa, tôi nghĩ rằng tôi đã đưa ra lời giải thích cho bạn. Ngoài ra tôi nghĩ việc làm là làm là buồn cười và đáng giá bao gồm. :-) Hy vọng là ok!
Bác sĩ Rebmu

7

C, 35 ký tự

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

Tại sao lưu trữ bất cứ thứ gì trong không gian được giao?
Peter Taylor

1
Trong trường hợp này, không thể giải quyết vấn đề này trong C.
FUZxxl

3
@dmckee, Không phải tất cả các lỗi phân đoạn đều bị tràn ngăn xếp, nhưng tôi muốn nói rằng lỗi này là do kết quả của việc vượt quá khả năng của ngăn xếp.
ugoren

1
@dmckee, alloca phân bổ từ ngăn xếp.
ugoren

1
@PeterTaylor: Có thể phụ thuộc vào việc triển khai nhưng trong trường hợp của tôi alloca(1)về cơ bản được dịch thành sub $1, %espđể ngăn xếp không bị chạm.
Công việc

7

Lisp thông thường, 7 ký tự

#1='#1#

Đẹp ... Tôi đã lên kế hoạch sử dụng #1=(#1#)cho thiết bị đầu cuối và (print #1=(#1#)), nhưng giải pháp của bạn tốt hơn nhiều.
người bảo vệ

Trên thực tế, điều đó không tràn vào thời gian đọc, chỉ khi bạn cố in nó. Vì vậy, ngoài sự khác biệt 1 ký tự, bạn không tốt hơn.
bảo vệ

Bạn nói đúng, chỉ cần chỉnh sửa nó ra. Tôi không chắc có cách nào để gây ra tràn trong thời gian đọc không.
Erik Haliewicz

Trên thực tế, #. # 1 = '# 1 # gây ra tràn thời gian đọc :-)
Erik Haliewicz

7

Python - 11 ký tự

exec'('*999

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

Giải pháp rất thông minh.
mbomb007

7

Máy tính Casio, 11 phím bấm

Rất khó để đếm byte / mã thông báo trong "ngôn ngữ" này - Tôi đã đưa ra số lần nhấn phím cần thiết, ngoại trừ Shift, Alpha (phím shift thứ hai) và =ở cuối - điều này chắc chắn phù hợp với 1 byte cho mỗi lần nhấn phím.

Đã thử nghiệm trên mô hình fx-85GT PLUS , đây là một máy tính khoa học tiêu chuẩn, không có đồ thị, "không lập trình". Các mô hình khác sẽ làm việc.

Chỉ cần xếp chồng lên 11 khối:

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

Nó thậm chí không đưa ra một lỗi cú pháp về số bị thiếu dưới căn bậc hai.

Điều này dường như không làm việc với căn bậc hai.

Cách khác, lặp lại cos(31 lần.

Đầu ra

Stack ERROR

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

Tôi tin rằng điều này đủ điều kiện là một ngăn xếp tràn. Ngăn xếp dường như rất nhỏ ...


Tôi luôn nghĩ rằng nó được gọi là lỗi stack vì bạn "xếp chồng" quá nhiều gốc: P
FlipTack

Máy tính Canon của tôi đưa ra lỗi ngăn xếp với bất kỳ toán tử nào (không bao gồm ít nhất +, -, * và /) nếu nó được lặp lại 25 lần trở lên. Chẳng hạn, điều này gây ra lỗi ngăn xếp (không có lỗi cú pháp):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 byte

BEGIN 1 AGAIN

tràn ngăn xếp giá trị


: X X ; X(9) phải tràn ngăn xếp trở lại
AMK

sẽ không hoạt động (X không được xác định trong khi xác định cuộc gọi và đó là tự tham chiếu / đệ quy
ratchet freak

@ratchetfreak, những từ điều khiển đó chỉ có thể được sử dụng ở trạng thái biên dịch, vì vậy chúng cần được gói trong một :... ;định nghĩa từ. Điều đó thêm ít nhất 6 ký tự, cộng thêm ít nhất 2 ký tự để thực hiện dưới dạng một chương trình. Bạn có thể làm nó ngắn hơn, nhưng đây là một ví dụ : : F BEGIN 1 AGAIN ; F. Tôi đề nghị điều này bởi vì câu hỏi yêu cầu: "Viết chương trình." Dù sao, đã cho bạn một upvote cho Forth, bất kể số lượng char! :-)
Darren Stone

6

Bản tin, 7

{1}loop

Ví dụ.

$ 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, không tối ưu hóa), 25

main=print$sum[1..999999]

tổng là lười biếng trong tổng số. Điều này chồng chất một loạt các thunks, sau đó cố gắng đánh giá tất cả chúng ở cuối, dẫn đến tràn ngăn xếp.


tôi luôn nghĩ rằng tổng đã được thực hiện bằng cách sử dụng Foldl '. phải không
tự hào


6

LaTeX: 8 ký tự

\end\end

Đây là cùng một mã được sử dụng trong câu trả lời này . Về cơ bản, \endmacro tự mở rộng lặp đi lặp lại, dẫn đến tràn ngăn xếp : TeX capacity exceeded, sorry [input stack size=5000]. Một lời giải thích chi tiết hơn có thể được tìm thấy ở đây .


5

PHP 5,4, 33 ký tự

for($n=1e5;$n--;)$a=(object)[$a];

Điều này gây ra lỗi tràn ngăn xếp khi các đối tượng stdClass lồng nhau tự động bị hủy:

$ 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 cho những gì phải là lần xuất hiện thứ hai của PHP trên CodeGolf!
Bojangles

5

Q / k (16 ký tự)

Không chắc đây có phải là tinh thần của thử thách không nhưng tôi không nghĩ nó phá vỡ quy tắc:

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

Thật xấu hổ khi C # đòi hỏi quá nhiều đánh máy, bạn đã truyền cảm hứng cho câu trả lời của tôi!
Andrew Gray

5

Một bó trong cùng một phong cách:

Con trăn, 30

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

Javascript, 38

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

Lua, 44

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

Trong Python x=lambda y:y(y);x(x)ngắn hơn (20 ký tự). Hàm này không được đệ quy. x gọi bất kỳ hàm nào được truyền cho nó như là một đối số.
AMK

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

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

Bạn chỉ đang sử dụng đệ quy, tại sao không làm điều đó, ví dụ như trong JS: (function x () {x ()}) ()?
xem

@xem Yêu cầu nói không đệ quy, đó là lý do.
Daniel

5

C #: 106 86 58 46 32 28 28

32 : Getters có thể SO máy của bạn dễ dàng trong C #:

public int a{get{return a;}}

1
Không cần setterpublic int a {get{return a;}}
Mike Koder

3
Điều này vi phạm quy tắc "Bạn không được phép xác định hàm gọi chính nó". Phải thừa nhận rằng nó ẩn sau cú pháp đường, nhưng nó vẫn thiếu điểm thách thức.
Peter Taylor

Việc thêm setter phần nào phá vỡ quy tắc, bởi vì bây giờ bạn có hai hàm gọi nhau. Nhưng tôi tự hỏi: điều đó có còn vi phạm ý định của OP đằng sau thử thách này không?
Andrew Gray

1
Ý tưởng theo tôi hiểu là tìm một số đệ quy lồng nhau quá mức trong trình thông dịch hoặc API tiêu chuẩn của ngôn ngữ. Điều này có thể không quá dễ dàng trong C #.
Peter Taylor

1
Tại sao "chuỗi công khai"? "int" cũng hoạt động tốt:int a { get { return a; } }
NPSF3000

5

INTERCAL, 12 byte

(1)DO(1)NEXT

Giải trình:

NEXTlà phiên bản của cuộc gọi chương trình con của INTERCAL (hoặc, ít nhất, gần nhất bạn có thể nhận được). Nó đẩy vị trí hiện tại lên NEXTngăn xếp và nhảy đến nhãn đã cho.

Tuy nhiên, nếu NEXTchiều dài ngăn xếp vượt quá 80, bạn sẽ nhận được khá nhiều phiên bản INTERCAL của tràn ngăn xếp:

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

Hãy thử nó trên Ideone. .


6
"ĐÃ TUYỆT VỜI VÀO LAGOON ĐEN" đây là gì, ArnoldC?
Addison Crump

5

Lưỡi liềm Mornington, 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

Lắp ráp X86 (AT & T), 33 ký tự

Lưu ý rằng mặc dù tôi đang sử dụng nhãn mainlàm mục tiêu nhảy, đây không phải là chức năng đệ quy.

.globl main
main:push $0;jmp main

Ý tưởng hay: đây là một loại đệ quy-không-đệ quy!
Andrea Corbellini

sử dụng a86: dd 0fdeb6010 ký tự!
Skizz

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.