รหัสย่อที่เพิ่ม SIGSEGV


คำตอบ:


113

C, 5 ตัวอักษร

main;

มันคือการประกาศตัวแปร - intประเภทมีนัย (คัดลอกคุณสมบัติจากภาษา B) และ0เป็นค่าเริ่มต้น เมื่อดำเนินการนี้จะพยายามที่จะดำเนินการเป็นจำนวน (ตัวเลขไม่ได้ปฏิบัติการ) SIGSEGVและสาเหตุ

ลองออนไลน์!


5
@Macmade: 0ที่จริงมันเป็น staticตัวแปรเริ่มต้นเป็น0และmain;เป็นstaticตามที่ฉันประกาศไว้นอกฟังก์ชั่น c-faq.com/decl/initval.html
Konrad Borowski

16
ครั้งสุดท้ายที่ฉันเล่นกับสิ่งนี้ฉันคิดว่ามีเหตุผลที่แตกต่างกันสำหรับ segfault ก่อนอื่นโดยการเรียก main คุณข้ามไปยังตำแหน่ง main ไม่ใช่ค่าอีกสิ่งหนึ่งคือmainint มันอยู่ใน.bssโดยปกติแล้วฟังก์ชั่นจะอยู่ใน.textเมื่อเคอร์เนลโหลดโปรแกรม elf มันสร้างหน้าปฏิบัติการสำหรับ.textและไม่ - ใช้.bssงานได้ดังนั้นเมื่อเรียก main คุณจะข้ามไปยังหน้าที่ไม่สามารถเรียกใช้ได้และการดำเนินการบางอย่างในหน้านั้นเป็นความผิด
mniip

23
อ๋อ segfaults ใน C เป็นค่าเริ่มต้นที่ค่อนข้างดี: P
Paul Draper

1
main __attribute__((section(".text#")))=0xc3;FTFY (อย่างน้อยก็ดูเหมือนว่าจะกลับมาโดยไม่ขัดข้องกับ x86 ของฉัน)
jozxyqk

2
@jozxyqk const main=195;หรือสั้น ที่น่าสนใจคือมันใช้งานได้เป้าหมายของการแข่งขันกอล์ฟรหัสนี้คือการทำให้รหัส segfault ไม่ทำงาน :)
Konrad Borowski

74

Bash, 11      

kill -11 $$

44
สัญญาณ 11 ใน 11 ตัวอักษร ดูเหมือนว่าเชื่อถือได้.
nyuszika7h

12
@ nyuszika7h ฉันกำลังจะเพิ่มความคิดเห็นของคุณ แต่ตอนนี้คุณมี 11 upvotes แล้วดังนั้นฉันจะทิ้งมันไว้ในตอนนั้น : P
HyperNeutrino

3
@AlexL คนอื่นดูเหมือนจะใจแตกที่ :(
theonlygusti

2
@theonlygusti ใช่ ... มันแย่เกินไป :( โอเคงั้นฉันก็สามารถ
โหวต

2
มากถึง 42 โหวตไม่แตะต้อง!
seadoggie01

39

ชุดประกอบ (Linux, x86-64), 1 ไบต์

RET

รหัส segfaults นี้


7
ในฐานะที่เป็นไฟล์ MSDOS .com มันจะทำงานและยกเลิกโดยไม่มีข้อผิดพลาด
JB

10
จุดประสงค์ของฉันคือ: เพียงแค่ระบุ“ ชุดประกอบ” ไม่เพียงพอที่จะทำให้ segfault
JB

52
@JB: บน MS DOS, ไม่มีโปรแกรมจะเคยผลิตความผิดของการแบ่งส่วน นั่นเป็นเพราะ MS DOS ทำงานในโหมดจริงที่การป้องกันหน่วยความจำไม่มีอยู่
celtschk

1
@celtschk IIRC NTVDM จะปรากฏขึ้นในที่อยู่ที่ไม่มีอยู่และที่ไม่ได้ถูกจัดสรรให้กับ MS-DOS
ζ--

2
@celtschk: คุณสามารถแยกมันออกได้เช่น: mov bx, 1000h; shr ebx, 4; mov eax, [ebx] -> CPU ยกระดับ SEGV (AFAIK ไม่มีใครจัดการได้)
Joshua

26

Python 2, 13

exec'()'*7**6

Windows รายงานรหัสข้อผิดพลาดของ c00000fd (Stack Overflow) ซึ่งฉันคิดว่าเป็นประเภทย่อยของความผิดพลาดในการแบ่งกลุ่ม

ขอบคุณ Alex A. และ Mego จึงได้รับการยืนยันว่าทำให้เกิดข้อผิดพลาดในการแบ่งส่วนในระบบ Mac และ Linux เช่นกัน Python เป็นภาษาที่ใช้ในการหยุดโปรแกรมของคุณ


7
Segmentation fault: 11บน Mac
Alex A.

7
Segmentation fault (core dumped)บน Linux
Mego

วางสายก่อนไหม
Mega Man

1
@ MegaMan ในขณะที่ใช้เวลานานในการเสร็จสิ้นหรือไม่ ไม่ 7 ** 6 มีค่าเพียงประมาณ 100K เท่านั้นจึงไม่มีความล่าช้าในการรับรู้
feersum

ทำไมจึงใช้งานได้ ดูเหมือนจะไม่ปรากฏบน Python 3.6.8 บน Mac OS
Max Gasner



17

Python 33 ตัวอักษร

>>> import ctypes;ctypes.string_at(0)
Segmentation fault

ที่มา: http://bugs.python.org/issue1215#msg143236

Python 60 ตัว

>>> import sys;sys.setrecursionlimit(1<<30);f=lambda f:f(f);f(f)
Segmentation fault

ที่มา: http://svn.python.org/view/python/trunk/Lib/test/crashers/recursive_call.py?view=markup

นี่เป็นเวอร์ชั่น Python ที่ฉันกำลังทดสอบ:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

โดยทั่วไปแล้ว Python interpreter นั้นยากที่จะผิดพลาด แต่ข้างต้นนั้นเป็นการเลือกที่ผิด ...


16

Forth - 3 ตัวอักษร

0 @

( @คือการดึงข้อมูล)


1
สั้นที่สุดเท่าที่จะทำงานกับระบบที่ทันสมัย
Demi

2
มาจากไหน Gforth เพิ่งพูดว่า "ที่อยู่หน่วยความจำไม่ถูกต้อง"
cat

15

C, 18

main(){raise(11);}

คุณต้องเพิ่ม #include <signal.h> ในรายการรหัสหรือไม่
Florian Castellane

5
@FlorianCastellane: ใน C90 และล่างสำหรับการเรียกฟังก์ชั่นใด ๆ int func()ทำได้โดยไม่ต้องประกาศที่มองเห็นเรียบเรียงโดยปริยายบอกว่ามันเป็น เช่นฟังก์ชันที่ส่งคืนintโดยรับพารามิเตอร์ที่ไม่ระบุ ในกรณีนี้raiseคือฟังก์ชันที่ส่งคืนค่า int รับอาร์กิวเมนต์ int ดังนั้นจึงสามารถใช้งานได้ (แม้ว่าคอมไพเลอร์จะบ่น)
Hasturkun

14

Perl (<5.14), 9 ตัวอักษร

/(?{??})/

ใน 5.14 เอ็นจิ้น regex นั้นถูกสร้างขึ้นมาใหม่เพื่อที่จะไม่สามารถชนได้ด้วยวิธีนี้ แต่ 5.12 และก่อนหน้านี้จะเป็น segfault ถ้าคุณลองทำสิ่งนี้


ฉันสามารถทำซ้ำนี้ใน Perl 5.14 (Debian) และ 5.18 (Arch Linux) sprunge.us/RKHT
nyuszika7h

ทำซ้ำกับ Perl v5.20.2 (Windows)
MeHI

14

ปฏิบัติการ W32 .com - 0 ไบต์

สิ่งนี้จะดูแปลก แต่ในระบบ Windows แบบ 32 บิตการสร้างและดำเนินการไฟล์. com ว่างอาจทำให้เกิด segfault ขึ้นอยู่กับ ... บางสิ่งบางอย่าง DOS เพิ่งยอมรับ (8086 ที่ไม่มีการจัดการหน่วยความจำไม่มีเซ็กเมนต์ที่มีความหมายต่อความผิดพลาด) และ Windows 64 บิตปฏิเสธที่จะเรียกใช้ (x86-64 ไม่มีโหมด v86 ในการเรียกใช้ไฟล์. com)


13

brainfuck (2)

<.

ใช่นี้ขึ้นอยู่กับการใช้งาน SIGSEGV เป็นผลมาจากคอมไพเลอร์ที่ดี


4
คอมไพเลอร์ที่เซกค่าเริ่มต้นใน "ดี" นั้นเป็นอย่างไร? ที่<ควรจะไม่มีผลกระทบหรือล้อมรอบ
nyuszika7h

12
การสร้างข้อผิดพลาดรันไทม์ทันทีบนการละเมิดขอบเขตที่ดีที่สุดเพราะจะทำให้โปรแกรมเมอร์ค้นหาและแก้ไขข้อผิดพลาดให้เร็วที่สุด การปล่อยให้โปรแกรมบั๊กกี้ทำงานชั่วขณะหนึ่งและหน่วยความจำที่เสียหายอย่างผิดพลาดก่อนที่จะหยุดทำงานจะทำให้ปัญหาในการวินิจฉัยยากขึ้น การป้องกันความผิดพลาดทั้งหมดนั้นเป็นสิ่งที่เลวร้ายที่สุด โปรแกรมเมอร์อาจทำให้โปรแกรม "ทำงาน" จากนั้นถูกทำให้เสียชื่อเสียงต่อสาธารณะเมื่อเกิดปัญหากับคอมไพเลอร์และล่ามมาตรฐาน
Daniel Cristofani

1
ในทางกลับกันการตรวจจับการละเมิดขอบเขตก่อนรันไทม์นั้นเป็นไปไม่ได้โดยทั่วไปและไม่เป็นประโยชน์อย่างยิ่งในกรณีที่เป็นไปได้ การผลิตข้อผิดพลาดรันไทม์ที่มีรายละเอียดมากขึ้นจะโอเค แต่การมีระบบปฏิบัติการจับเป็น segfault นั้นยอดเยี่ยมเพราะไม่มีค่าใช้จ่ายด้านความเร็ว (ในกรณีที่ยังไม่ชัดเจนตัวแปลก็ไม่ segfault - มันสร้าง executables ที่ segfault ทันทีที่พวกเขาพยายามเข้าถึงหน่วยความจำนอกขอบเขต)
Daniel Cristofani

4
คุณสามารถให้การใช้งานที่ก่อให้เกิดพฤติกรรมนี้และถูกสร้างขึ้นก่อนที่ความท้าทายนี้จะโพสต์? ถ้าไม่คำตอบนี้ไม่ถูกต้อง
Mego

1
การตรวจสอบขอบเขตเป็นการใช้งานเฉพาะดังนั้นฉันแน่ใจว่ามีบางอย่างที่จะผิดพลาด SIGSEGV ใด ๆ ก็ตาม ฉันสงสัยมัน. มีโปรแกรมจำนวนมากที่ขึ้นอยู่กับการตัดอาร์เรย์ทางด้านซ้าย มันค่อนข้างสะดวกที่จะมีพื้นที่เก็บข้อมูลที่สามารถปลูกได้ทั้งสองด้าน
captncraig

12

Haskell, 31

foreign import ccall main::IO()

สิ่งนี้จะสร้าง segfault เมื่อรวบรวมกับ GHC และเรียกใช้ ไม่จำเป็นต้องตั้งค่าสถานะส่วนขยายเนื่องจากอินเตอร์เฟสของฟังก์ชันต่างประเทศอยู่ในมาตรฐาน Haskell 2010


10

C - 11 (19) 7 (15) 6 (14) 1 ตัวอักษร, AT&T x86 แอสเซมเบลอร์ - 8 (24) ตัวอักษร

รุ่น C คือ:

*(int*)0=0;

โปรแกรมทั้งหมด (ไม่ตรงตามมาตรฐาน ISO สมมุติว่า K&R C) มีความยาว 19 ตัวอักษร:

main(){*(int*)0=0;}

แอสเซมเบลอร์ตัวแปร:

orl $0,0

โปรแกรมทั้งหมดยาว 24 ตัวอักษร (เพียงเพื่อการประเมินผลเนื่องจากไม่ใช่แอสเซมเบลอร์จริง ๆ ):

main(){asm("orl $0,0");}

แก้ไข :

คู่สายพันธุ์ C อันแรกใช้ zero-initialization ตัวแปรโกลบอลพอยน์เตอร์:

*p;main(){*p=0;}

อันที่สองใช้การเรียกซ้ำแบบไม่สิ้นสุด:

main(){main();}

ตัวแปรสุดท้ายคืออักขระที่สั้นที่สุดหนึ่ง - 7 (15) ตัว

แก้ไข 2 :

คิดค้นตัวแปรอีกตัวหนึ่งซึ่งสั้นกว่าตัวแปรใด ๆ ข้างต้น - 6 (14) ตัวอักษร มันจะถือว่าสตริงตัวอักษรถูกใส่ลงในเซ็กเมนต์แบบอ่านอย่างเดียว

main(){*""=0;}

แก้ไข 3 :

และความพยายามครั้งสุดท้ายของฉัน - ความยาว 1 ตัวอักษร:

P

เพียงแค่รวบรวมมันเช่นนั้น:

cc -o segv -DP="main(){main();}" segv.c

3
ใน C ไม่ใช่ หลัก เพียง 5 charecters
Arya

1
: Linker ไม่ได้ตรวจสอบว่าหลักเป็นฟังก์ชั่นหรือไม่เพียงแค่ผ่านมันไปที่ตัวโหลดและส่งคืนsigsegv
Arya

1
@FUZxxl ในกรณีนี้mainคือตัวแปรโกลบอลโกลบอลที่กำหนดค่าเริ่มต้นเป็นศูนย์ดังนั้นสิ่งที่เราได้รับคือผลลัพธ์ของการพยายามดำเนินการศูนย์ไบต์บางส่วน ใน x86 มันจะเป็นสิ่งที่ต้องการซึ่งเป็นคำแนะนำที่ถูกต้องสมบูรณ์ซึ่งพยายามที่จะเข้าถึงหน่วยความจำที่อยู่ที่เก็บไว้ในadd %al,(%rax) %raxโอกาสของการมีที่อยู่ที่ดีมีเพียงเล็กน้อย
Alexander Bakulin

6
แน่นอนว่ารายการสุดท้ายสามารถใช้กับทุกสิ่งคุณเพียงแค่ต้องระบุอาร์กิวเมนต์คอมไพเลอร์ที่เหมาะสม ซึ่งควรทำให้มันเป็นผู้ชนะโดยอัตโนมัติของการแข่งขันกอล์ฟรหัสใด ๆ :-)
celtschk

5
โดยทั่วไปแล้วการรวบรวมธงอื่น ๆ นอกเหนือจากที่เลือกรุ่นภาษาที่จะใช้จะถูกนับรวมทั้งหมด
Jerry Jeremiah

9

dc - 7 ตัวอักษร

[dx0]dx

ทำให้เกิดการล้นสแต็ค


ทำงานได้ แต่คุณสามารถทำอย่างละเอียด? ทำไมมันมีพฤติกรรมแบบนั้น
Stéphane Gourichon

2
[dx0]เก็บdx0ในสแต็กจากนั้นdทำซ้ำองค์ประกอบสแต็คด้านบนจากนั้นxจะปรากฏองค์ประกอบสแต็คด้านบน ( dx0) และดำเนินการ ซึ่งทำซ้ำองค์ประกอบสแต็คด้านบนและเริ่มดำเนินการ ... 0ความจำเป็นที่จะต้องมีเพื่อป้องกันไม่ให้นี่เป็นการเรียกแบบหางดังนั้นพวกมันจึงสร้างขึ้นทั้งหมด
Ben Millwood

8

Perl, 10/12 ตัวอักษร

ทางออกที่โกงเล็กน้อยคือการโกนเคล็ดลับทุบตีของ Joey Adams :

kill 11,$$

อย่างไรก็ตามเพื่อให้ได้ segfault ที่แท้จริงใน Perl unpack pเป็นทางออกที่ชัดเจน

unpack p,1x8

ในทางเทคนิคสิ่งนี้ไม่ได้รับประกันว่าจะได้รับ segfault เนื่องจากที่อยู่ 0x31313131 (หรือ 0x313131313131313131 บนระบบ 64 บิต) อาจชี้ไปยังพื้นที่ที่อยู่ที่ถูกต้องโดยบังเอิญ แต่ราคาถูกกว่านั้น นอกจากนี้ถ้า perl ถูกพอร์ตไปยังแพลตฟอร์มที่พอยน์เตอร์ยาวกว่า 64 บิตx8จะต้องเพิ่มขึ้น


1
สิ่งนี้คือ1x8อะไร
Hannes Karppila

@HannesKarppila เป็นวิธีสั้น ๆ ในการเขียน"11111111".
Ilmari Karonen


8

OCaml, 13 ไบต์

Obj.magic 0 0

สิ่งนี้ใช้ฟังก์ชั่นObj.magicซึ่งเป็นการข่มขู่ชนิดสองอย่างไม่ปลอดภัย ในกรณีนี้มันจะรวมเป็น 0 (จัดเก็บเป็นค่าทันที 1 เนื่องจากบิตแท็กที่ใช้โดย GC) กับประเภทฟังก์ชั่น (เก็บไว้เป็นตัวชี้) ดังนั้นจึงพยายามปฏิเสธที่อยู่ 1 และแน่นอนว่าจะแยกจากกัน


1
it coerces 0 (stored as the immediate value 1)- ทำไมถึงถูกจัดเก็บเป็น 1
Skyler

1
@Skyler see edit
Demi

1
Obj.magic()0เป็นหนึ่ง :) ถ่านสั้น
เบน Millwood

8

Bash ขนาด 4 ไบต์

แข็งแรงเล่นกอล์ฟ

. $0

รวมสคริปต์ซ้ำเข้าไปในตัวเอง

อธิบาย

การดำเนินการ "ซอร์ส" (.) แบบเรียกซ้ำทำให้เกิดการล้นสแต็กในที่สุดและเนื่องจากBashไม่ได้รวมเข้ากับlibsigsegvผลลัพธ์นี้จึงเป็น SIGSEGV

โปรดทราบว่านี้ไม่ได้เป็นข้อผิดพลาด แต่พฤติกรรมที่คาดหวังตามที่กล่าวไว้ที่นี่

ทดสอบ

./bang 
Segmentation fault (core dumped)

ลองออนไลน์!


8

อันที่จริง , 17 16 11 10 9 ไบต์

⌠[]+⌡9!*.

ลองออนไลน์!

หากข้างต้นไม่ผิดพลาดให้ลองเพิ่มจำนวน (ระบุตัวเลขหลายหลักในจริงด้วยเครื่องหมายโคลอน)

ขัดข้องล่ามโดยใช้ประโยชน์จากบั๊กในงูหลามที่เกี่ยวข้องกับitertools.chainวัตถุที่ซ้อนกันอย่างล้ำลึกซึ่งใช้ในการปฏิบัติงาน+จริง


7

C # - 62

System.Runtime.InteropServices.Marshal.ReadInt32(IntPtr.Zero);

แก้ไข: 23

unsafe{int i=*(int*)0;}

ต้องรวบรวมด้วย / ไม่ปลอดภัยเพื่อให้การทำงานนี้ ด้วยเหตุผลบางอย่างที่ฉันไม่เข้าใจ*(int*)0=0เพียงแค่โยน NullReferenceException ในขณะที่รุ่นนี้ให้การละเมิดการเข้าถึงที่เหมาะสม


int i=*(int*)0;ผลตอบแทน NullReferenceException สำหรับฉัน
Peter Olson

คุณสามารถลองเข้าถึงตำแหน่งเชิงลบเช่น*(int*)-1=0และรับการละเมิดการเข้าถึง
Peter Olson

ข้อยกเว้นเฉพาะคือสิ่งที่ clr ล้อมไว้และไม่มีนัยสำคัญ ระบบปฏิบัติการของตัวเองให้ความผิดพลาดในทุกกรณีเหล่านี้
captncraig

สาเหตุที่ทำให้*(int*)0=0เกิดข้อยกเว้นเกิดขึ้นเนื่องจากการปรับให้เหมาะสม โดยเฉพาะอย่างยิ่งที่จะหลีกเลี่ยงค่าใช้จ่ายในการตรวจสอบเพื่อnullเพิ่มประสิทธิภาพการตรวจสอบอาจลบ null แต่เมื่อ segfault เกิดขึ้นมันอาจ rethrow NullReferenceExceptionว่ามันเป็นที่เหมาะสม
Konrad Borowski

7

PicoLisp - 4 ตัวอักษร

$ pil
: ('0)
Segmentation fault

นี่คือพฤติกรรมที่ตั้งใจไว้ ตามที่อธิบายไว้ในเว็บไซต์:

หากภาษาโปรแกรมบางโปรแกรมอ้างว่าเป็น "Swiss Army Knife of Programming" ดังนั้น PicoLisp อาจถูกเรียกว่า "Scalpel of Programming": คมชัดแม่นยำขนาดเล็กและเบา แต่ก็มีอันตรายในมือของผู้ไม่มีประสบการณ์


7

F90 - 39 ไบต์

real,pointer::p(:)=>null()
p(1)=0.
end

รวบรวม:

gfortran segv.f90 -o segv 

การดำเนินการ:

./segv 

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7FF85FCAE777
#1  0x7FF85FCAED7E
#2  0x7FF85F906D3F
#3  0x40068F in MAIN__ at segv.f90:?
Erreur de segmentation (core dumped)

วัสดุ:

gfortran --version
GNU Fortran (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4

1
โพสต์แรกที่ดี
Rɪᴋᴇʀ

6

19 ตัวอักษรใน C

main(a){*(&a-1)=1;}

มันคุ้มค่าที่อยู่ corrupts การกลับมาของฟังก์ชั่นหลักจึงได้รับ SIGSEGV mainในการกลับมาของ


มันขึ้นอยู่กับเค้าโครงของเฟรมสแต็กดังนั้นในบางสถาปัตยกรรมอาจไม่ล้มเหลว
Alexander Bakulin

6

J (6)

memf 1

memfหมายถึงหน่วยความจำว่าง1ถูกตีความว่าเป็นตัวชี้



5

ชุด Unix PDP-11, 18 ไบต์ไบนารี่, 7 ไบต์แหล่งที่มา

(สิ่งนี้กำลังกลายเป็นธีมของฉันอาจเป็นเพราะเป็นภาษาเดียวที่ฉันรู้ว่าไม่มีใครอยู่ที่นี่)

inc(r0)

เพิ่มไบต์เดียวที่จ่าหน้าโดยค่าเริ่มต้นของ r0 [ซึ่งเกิดขึ้นเป็น 05162 ตาม simh debugger] เมื่อเริ่มต้นโปรแกรม

0000000 000407 000002 000000 000000 000000 000000 000000 000000
0000020 005210 000000

และเช่นเคยไบต์ภายนอกที่อยู่ด้านท้ายสามารถลบออกด้วยแถบ

ฉันพยายามทำให้แหล่งที่มาสั้นลง แต่ได้รับข้อผิดพลาดทางไวยากรณ์หรือ SIGBUS เสมอ


5

Matlab - ใช่มันเป็นไปได้!

ในการตอบสนองต่อคำถามของฉัน Amro ก็คิดเรื่องนี้ขึ้นมา

S = struct();
S = setfield(S, {}, 'g', {}, 0)

โปรดให้รุ่น Matlab - R2015B (และ 2016B ด้วย) เพียงแค่โยนข้อผิดพลาด: ข้อผิดพลาดในการใช้ setfield (บรรทัดที่ 56) ต้องการดัชนีอย่างน้อยหนึ่งรายการ
Florian Castellane

@FlorianCastellane ไม่สามารถลองใช้ทุกรุ่นได้ในตอนนี้ แต่ได้รับการยืนยันแล้วว่าได้รับ segfault ในบางเวอร์ชั่นล่าสุดเป็น 2014b และเร็วที่สุดในปี 2012a
Dennis Jaheruddin

5

JavaScript Shell ขนาด 7 ไบต์

clear()

ล้างทุกอย่างไม่เพียง แต่ขอบเขตปัจจุบันซึ่งทำให้บอร์กจำนวนมากซึ่งส่งผลให้ JS เกิดระเบิดและแยกกันไม่ออก


ตาม MDN (document.clear) สิ่งนี้ควรทำบางสิ่งใน Mozilla รุ่นเก่าจริง ๆ เท่านั้นและถึงตอนนั้นประสบการณ์ในการใช้งานของคุณเป็นอย่างไร
tomsmeding

@tommeding นี่คือ window. ชัดเจน, FF โดยตรงไม่เปิดเผยมันเป็น spidermonkey ในตัว
Downgoat

5

Pyth 3 ตัว

j1Z

นี้จะเป็นส่วนหนึ่งที่ผมอธิบายวิธีการที่ฉันมากับคำตอบนี้นอกจากฉันถูกต้องตามกฎหมายมีเงื่อนงำ หากใครสามารถอธิบายสิ่งนี้ให้ฉันฉันจะขอบคุณ

ที่นี่อยู่ในล่ามออนไลน์

คำอธิบาย

jยกกำลังสองฐานและเรียกตัวเองซ้ำ ๆ จนกว่าฐานจะใหญ่อย่างน้อยเท่ากับจำนวน เนื่องจากฐานเป็น0นั่นไม่เคยเกิดขึ้น ด้วยการ จำกัด การเรียกซ้ำที่สูงพอคุณจะได้รับ segfault

- เดนนิส♦


คิดอะไรบางอย่างออกมา! จากการเรียกดูแหล่งที่มา Pyth ของผมพบว่ารหัสนี้ไม่jเกี่ยวกับการ1และ0ซึ่งพยายามที่จะแปลงเป็นฐาน1 0ทำไม segfaults นั้นฉันไม่มีความคิด ...
NoOneIsHere

1
ดูที่นี่ jยกกำลังสองฐานและเรียกตัวเองซ้ำ ๆ จนกว่าฐานจะใหญ่อย่างน้อยเท่ากับจำนวน เนื่องจากฐานเป็น0นั่นไม่เคยเกิดขึ้น ด้วยการ จำกัด การเรียกซ้ำที่สูงพอคุณจะได้รับ segfault
เดนนิส

@Dennis IDEone
NoOneIsHere

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