it-swarm-vi.tech

Mã ngắn nhất để gây ra lỗi tràn ngăn xếp là gì?

Để kỷ niệm sự ra mắt công khai của Stack Overflow, đoạn mã ngắn nhất để gây ra lỗi tràn stack là gì? Bất kỳ ngôn ngữ chào mừng.

ETA: Chỉ cần rõ ràng về câu hỏi này, vì tôi là người dùng Scheme không thường xuyên: gọi "đệ quy" thực sự là lặp đi lặp lại, và bất kỳ giải pháp nào có thể được chuyển đổi thành một giải pháp lặp tương đối tầm thường bởi một trình biên dịch đàng hoàng sẽ không được đếm. :-P

ETA2: Bây giờ tôi đã chọn một câu trả lời hay nhất của người Viking; xem bài này để biết lý do. Cảm ơn những người đã đóng góp! :-)

160
Chris Jester-Young

Bản thảo 3: Tất cả được thực hiện với mảng ...

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

Có lẽ không phải là nhỏ nhất nhưng tôi nghĩ nó dễ thương. Đặc biệt là phương pháp Push trả về chiều dài mảng mới!

0
defmeta

Tháng 10

let rec f l = f [email protected];;

Đây là một chút khác nhau. Chỉ có một khung ngăn xếp trên ngăn xếp (vì nó là đệ quy đuôi), nhưng đầu vào của nó tiếp tục phát triển cho đến khi nó tràn vào ngăn xếp. Chỉ cần gọi f với một danh sách không trống như vậy (tại Trình thông dịch Nhắc):

# f [0];;
Stack overflow during evaluation (looping recursion?).
0
Graphics Noob
int main(void) { return main(); }
0
Daniel Băluţă
main(){
   main();
}

Plain and Nice C. Cảm thấy khá trực quan với tôi.

0
N 1.1

VB.Net

Function StackOverflow() As Integer
    Return StackOverflow()
End Function
0
Kibbee

Không ngắn lắm, nhưng hiệu quả! (JavaScript)

setTimeout(1, function() {while(1) a=1;});
0
Thevs

JavaScript (17 byte)

eval(t="eval(t)")

Tập lệnh VB (25 byte)

t="Execute(t)":Execute(t)
0
st0le

Để giải trí, tôi đã phải tìm kiếm Hội nghị Motorola HC11:

              org           $100
Loop    nop
          jsr            Loop
0
PersistenceOfVision

Một tệp Windows Batch khác:

:a
@call :a
0
Carlos Gutiérrez

Vấn đề meta trong D:

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

biên dịch chồng thời gian tràn

0
BCS

Haskell:

main = print $ x 1 where x y = x y + 1
0
jkramer

Ruby (một lần nữa):

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

Đã có rất nhiều giải pháp Ruby nhưng tôi nghĩ rằng tôi nên sử dụng một biện pháp chính xác.

0
finnw
_asm t: call t;
0
Tolgahan Albayrak

Ruby, mặc dù không ngắn:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

Mặc dù nó không thực sự có một ngăn xếp ...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Con trăn

import sys  
sys.setrecursionlimit(sys.maxint)  
def so():  
    so()  
so()
0
Artur Gaspar

Tôi nghĩ rằng nó gian lận tôi chưa bao giờ chơi trước đây;) nhưng ở đây đi

Trình biên dịch 8086:

org Int3VectorAdrress, đó có phải là gian lận không?

số 3

1 byte - hoặc 5 ký tự tạo mã, bạn nói gì?

0
Despatcher

Trong hội x86, đặt lệnh chia cho 0 tại vị trí trong bộ nhớ của trình xử lý ngắt để chia cho 0!

0
Dennis Ferron

tại sao không

mov sp,0

(chồng mọc xuống)

0
mike511

Tối ưu hóa cuộc gọi đuôi có thể bị phá hoại bằng cách không gọi đuôi. Trong LISP chung:

(defun f () (1+ (f)))
0
Svante

Ngôn ngữ hội Z80 ...

.org 1000
loop: call loop

điều này tạo ra 3 byte mã tại vị trí 1000 ....

1000 CD 00 10

0
Tim Ring

Fortran, 13 và 20 ký tự

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

hoặc là

call main
end

Trường hợp thứ hai là phụ thuộc vào trình biên dịch; for GNU Fortran, nó sẽ cần được biên dịch với -fno-underscoring.

(Cả hai tổng số bao gồm các dòng mới yêu cầu)

0
F'x

Thuốc nhuộm APL

fib←{
    ⍵∊0 1:⍵
    +/∇¨⍵-1 2
}
0
wash

Prolog

Chương trình này gặp sự cố cả SWI-Prolog và Sicstus Prolog khi được tư vấn.

p :- p, q.
:- p.
0
Kaarel

Trong C #, điều này sẽ tạo ra một stackoverflow ...

static void Main()
{
    Main();
}
0
user11039

Trong tệp PostScript được gọi là so.ps sẽ gây ra luồng thực thi

%!PS
/increase {1 add} def
1 increase
(so.ps) run
0
Mark Nold