ข้อผิดพลาด Runtime ที่ไร้สาระ [ปิด]


40

เขียนโปรแกรมที่สร้างข้อผิดพลาดรันไทม์ที่บ้าคลั่งปิดบังไร้สาระหรือไร้สาระ ไม่จำเป็นต้องมีความสับสนและความล้า (ความสั้น)

  • โซลูชันที่ดูเหมือนว่าพวกเขาควรจะทำงานได้ดีจะดีกว่า
  • วิธีแก้ปัญหาที่ดูเหมือนว่าพวกเขาควรจะทำลายทางเดียว แต่ทางที่ดีกว่า
  • วิธีแก้ปัญหาที่เป็นแบบ nondeterministic จะดีกว่าตราบใดที่มันสามารถทำซ้ำได้ในบางครั้ง
  • วิธีแก้ปัญหาที่มีระยะทางไกลระหว่างสาเหตุข้อผิดพลาดและการรวมตัวจะดีกว่า
  • คะแนนโบนัสสำหรับการผลิตข้อผิดพลาดที่ควรจะเป็นไปไม่ได้
  • คะแนนโบนัสสำหรับข้อผิดพลาดที่ผิดพลาดรันไทม์ (เช่นการทำผิดพลาดส่วนหลาม) หรือระบบปฏิบัติการ

หน่วยคะแนนจะเพิ่มขึ้น

ภาคผนวก 1

คอมไพเลอร์พฤติกรรมที่ไม่ดีก็เช่นกัน


2
การสร้าง Python segfault นั้นง่าย:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
— marinus

ปีเตอร์: อ้าว ฉันตอบคำถามครึ่งทางผ่านการเขียน: S
— Wug

... แล้ว malbolge หรือ INTERCAL ล่ะ? ฉันค่อนข้างมั่นใจว่าพวกเขามีข้อผิดพลาดที่ค่อนข้างบ้าอาจทำกับ char เดียวเช่นกัน
— acolyte

1
นี้แน่นอนการเชื่อมโยงที่ดีที่สุดสำหรับการแก้ปัญหา: destroyallsoftware.com/talks/wat :-)
— เสรี

1
ซ้ำเป็นไปได้ของstackoverflow.com/q/1146014/736054
— Konrad Borowski

คำตอบ:


69

หนึ่ง PHP บังคับ (ซึ่งยังไม่ได้รับการแก้ไข ณ 5.4):

<?::

ขาออก:

ข้อผิดพลาดในการแยกวิเคราะห์: ข้อผิดพลาดทางไวยากรณ์ T_PAAMAYIM_NEKUDOTAYIM ที่ไม่คาดคิดในบรรทัดที่ 1

Whaa?


12
ฉันชอบอันนี้ อาจเป็นข้อความแสดงข้อผิดพลาดที่ฉันโปรดปราน นอกเหนือจากครั้งหนึ่งที่เพื่อนของฉันพยายามบูตแล็ปท็อป windows ของเขาไปยังพาร์ติชันการกู้คืนและเปลี่ยนทั้งหน้าจอเป็นกล่องสีขาวที่มีตัวอักษรสีแดงตัวใหญ่สะกด "ERROR"
— Wug

4
โดยเจตนา แต่แปลก ๆ : "Paamayim Nekudotayim ในตอนแรกดูเหมือนจะเป็นทางเลือกที่แปลกสำหรับการตั้งชื่อลำไส้ใหญ่สองครั้งอย่างไรก็ตามในขณะที่เขียน Zend Engine 0.5 (ซึ่งพลัง PHP 3) นั่นคือสิ่งที่ทีม Zend ตัดสินใจที่จะเรียกมันว่า จริงๆแล้วมันหมายถึงสองโคลอน - ในภาษาฮิบรู! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
— Jon Gauthier

12
@HansEngel: ใช่มันหมายถึงสองโคลอนในภาษาฮิบรู การใช้ภาษาอังกฤษทุกโทเค็นยกเว้นอันนี้สมเหตุสมผลเพราะ ... ? ฉันเดาว่าฉันแค่ต้องถามทีม PHP
— Ry-

ขออภัยเพื่อน แต่คุณเพียงแค่เรียกวิธีการคงที่ / ตัวแปร''(สตริงว่าง) จากชั้นเรียน''(สตริงว่าง)
— Ismael Miguel

1
@IsmaelMiguel: มันสับสนเพราะภาษาฮีบรูไม่ใช่เพราะมันผิด
— Ry-

61

ข้อผิดพลาดในการรวบรวม Gcc:

int main()
{
        long long long a;
}

ข้อผิดพลาด: ยาวยาวนานเกินไปสำหรับ GCC


6
พวกเขาเพิ่งรู้ว่าใครบางคนจะพยายามlong long longถ้าlongและlong longถูกต้องทั้งคู่
— Konrad Borowski

3
ฉันคิดว่า "a ยาวเกินไป!" น่าจะเป็นข้อความแสดงข้อผิดพลาดที่ดีขึ้น แต่นี่ยังเป็นคำตอบที่ดี
— 2557

52

พรอมต์คำสั่งของ Windows

If you're happy and you know it clap your hands!

เอาท์พุท:

มีความสุขที่ไม่คาดคิดในเวลานี้


1
ฉันลองคำสั่งนั้นเพื่อตรวจสอบผลลัพธ์ แต่มันปรากฏขึ้น^V:( วันที่ยากลำบากเหล่านี้
— Fabricio

8
@Fabricio นั่นแค่กด CTRL + V เพื่อวางสายหรือไม่ ใน Command Prompt แป้นพิมพ์ "ทางลัด" สำหรับการวางคือ ALT + SPACE, E, P.
— Hand-E-Food

42

PHP

$ cat error.php 
<?php
function echo_string(string $string) {
    echo $string;
}
echo_string("Hello, world!");
$ php error.php 
PHP Catchable fatal error:  Argument 1 passed to echo_string() must be an instance of string, string given, called in error.php on line 5 and defined in error.php on line 2

คุณไม่สามารถส่งผ่านสตริงไปยังฟังก์ชั่นคุณต้องส่งสตริงแทน!

อัปเดต:รหัสนี้ไม่ใช่ข้อผิดพลาดใน PHP 7 วางเมาส์บน / คลิก / แตะสปอยเลอร์เพื่อตรวจสอบสาเหตุ (มีสปอยเลอร์เกี่ยวกับวิธีการทำงานของรหัส)

มีการเพิ่มคุณสมบัติใหม่ที่เรียกว่าการประกาศประเภทเซนต์คิตส์และเนวิสใน PHP 7 คุณลักษณะนี้อนุญาตให้ใช้ประเภทสเกลาร์ในการประกาศฟังก์ชัน


6
อะไรที่ f *** php
— 2557

7
PHP พยายามรับคลาสstring(ซึ่งใช้ได้) การบอกกล่าวแบบ (สิ่งที่คุณกำลังทำ) นั้นใช้ได้กับคลาสเท่านั้น เนื่องจากคลาสstringไม่มีอยู่จึงทำให้เกิดข้อผิดพลาด
— Ismael Miguel

คุณสามารถตรวจสอบรหัสของคุณได้ที่นี่: sandbox.onlinephpfunctions.com/code/…
— Ismael Miguel

2
@ IsmaelMiguel: ใช่ฉันเข้าใจว่าทำไมมันเกิดขึ้น แต่ข้อผิดพลาดยังคงไร้สาระในความคิดของฉัน
— Konrad Borowski

1
array(''=>array()'')แล้วลอง
— Ismael Miguel

33

ทุบตี

$ echo "Hello, world!"
bash: !": event not found

และคุณจะคิดว่าทุบตีจะยอมรับ "สวัสดีโลก!" โครงการ


คำอธิบายของสิ่งนี้: สตริงที่ส่งผ่านเครื่องหมายคำพูดคู่เป็นอาร์กิวเมนต์สำหรับโปรแกรมใน bash ถูกขยายความหมาย`echo hi`จะเปลี่ยนเป็นhiภายในของสตริงที่มีเครื่องหมายคำพูดคู่ !ถูกนำมาใช้เป็นคำนำหน้าไปยังdesignators เหตุการณ์ ดังนั้นทุบตีพยายามประเมิน!"แต่ไม่สามารถหาเหตุการณ์อ้างอิง
— Mego

31

Python 2.7

# Look I'm actually coding: see my happy face?
print ':)'

สร้างความช่วยเหลือที่ค่อนข้างไม่ดี:

SyntaxError: encoding problem: with BOM

ความคิดเห็นธรรมดาสามารถสร้างข้อผิดพลาดได้อย่างไร?


12
ในล่าม Python ล่าสุด: หาก 2 บรรทัดแรกขึ้นต้นด้วย#และมีสตริงcoding:คำถัดไปที่ใช้เป็นคำอธิบายการเข้ารหัส
— AMK

31

มาติกา

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

Rotate[f/0, .6]

ป้อนคำอธิบายรูปภาพที่นี่


11
นั่นไม่ใช่ข้อผิดพลาดจริง ๆ ใช่ไหม? เป็นเพียงค่า Mathematica ที่ส่งกลับเมื่อคุณแบ่งบางอย่างด้วยศูนย์
— Ilmari Karonen

26

เครื่องคิดเลขกราฟ TI-89

ฉันค้นพบสิ่งนี้เมื่อเรียนรู้เกี่ยวกับความแตกต่างโดยนัยในแคลคูลัสระดับมัธยมปลาย หากคุณป้อนข้อมูล:

d(xy+x=0,x)

คุณจะได้รับต่อไปนี้:

1 = 0

ด้วยข้อแม้นี้พิมพ์ตัวอักษรเล็ก ๆ ที่ด้านล่างของหน้าจอ:

Warning: May produce false equation

สิ่งนี้เกิดขึ้นเพราะxyไม่ได้ถูกตีความว่าเป็นx * yแต่เป็นสัญลักษณ์ของมันเอง, xy.

ผิดปกติถ้าคุณทำd(xy=0,x)คุณจะได้0 = 0รับคำเตือนเดียวกัน


22

คุณสามารถสร้างสมองของคอมไพเลอร์ Haskell ได้:

C:\Windows\system32>ghci
...
Prelude> :set -XExistentialQuantification
Prelude> data Foo = forall a. Foo a
Prelude> let foo f = 1 where Foo a = f

<interactive>:4:21:
    My brain just exploded
    I can't handle pattern bindings for existential or GADT data constructors.
    Instead, use a case-expression, or do-notation, to unpack the constructor.
    In the pattern: Foo a
    In a pattern binding: Foo a = f
    In an equation for `foo':
        foo f
          = 1
          where
              Foo a = f
Prelude>

22

ทับทิม

การละเมิดกฎ

class StandardError

  def to_s
    words = File.open('/usr/share/dict/words'){|f|f.readlines.map &:chop}.sample(100)
    words.last.capitalize!
    super.gsub(/\w+/){words.pop}
  end

  to_s(3)

end

หากทำงานบน OSX ผลิตเช่น

$ ruby weird_runtime_error.rb 
weird_runtime_error.rb:9:in `to_s': Sculpturation contingence explicate tappet(phonendoscope ethopoeia nannandrous) (ArgumentError)
    from weird_runtime_error.rb:9:in `<class:StandardError>'
    from weird_runtime_error.rb:1:in `<main>'

6
นั่นหมายความว่าอย่างไรบนโลก?
— TRiG

9
wrong number of arguments(1 for 0)มันหมายความว่า มันแสดงให้เห็นว่าผ่านภาษาที่สร้างขึ้นอย่างเกียจคร้านและสุ่มใช้คำศัพท์ภาษาอังกฤษโดยไม่คำนึงถึงความน่าเชื่อถือทางภาษา
— ชำนาญวิชาประวัติศาสตร์

21

พรอมต์ DOS

c:\>make love

ให้คุณ

Fatal Error: 'love' does not exist. Don't know how to make it.

สะดุดกับสิ่งนี้ในขณะที่ฉันพยายามดูถูกคอมพิวเตอร์ของฉันสำหรับความร่วมมือ ทำให้ฉันรู้สึกเศร้าสักพักจนฉันรู้ว่าสิ่งนี้จะเกิดขึ้นได้หากความรักไม่มีอยู่จริง หากมีอยู่เขายินดีที่จะทำ


5
นี่คืออุทิศให้กับmakeยูทิลิตี้ไม่ใช่ DOS เอง
— Vovanium

1
ฉันได้รับ:make: *** No rule to make target 'love'. Stop.
— ตลอดไป

@ ทุกอย่างที่คุณกำลังทำผิด
— Navin

ฉันได้รับ: make: Fatal error: Don't know how to make target 'love'แต่นั่นคือ Unix บน DOS, make is not recognized as an internal or external command, operable program or batch fileฉันได้รับ
— lebatsnok

17

Bash (ข้อผิดพลาด Quine)

ข้อผิดพลาดนี้คือ Quine in Bash!

$ bash: bash:: command not found...
bash: bash:: command not found...

แน่นอนคุณต้องมีความเกี่ยวข้องlocale(ภาษาอังกฤษที่นี่)


1
ฉันไม่ได้พิมพ์...ในตอนท้ายดังนั้นฉันต้องละเว้นมันในอินพุตดั้งเดิมเช่นกัน
— Zev Eisenberg


15

Bash - การพักผ่อนหย่อนใจที่แม่นยำของข้อความแสดงข้อผิดพลาดทางประวัติศาสตร์ที่หายาก

echo -ne $(tail -n +257 /usr/src/linux*/drivers/char/lp.c | head -1 | cut -d '"' -f 2 | sed 's/%d/0/')

เอาท์พุท:

lp0 on fire

เคอร์เนล linux ต้องการให้คลายแพ็กเกจในตำแหน่งปกติ

สนุกจริง: ฉันเคยได้รับข้อความนี้อย่างจริงจังเมื่อใช้เครื่องพิมพ์ Ribbon เก่า


มันเป็นข้อความแสดงข้อผิดพลาดหรือเป็นเพียงผลลัพธ์ของโปรแกรมหรือไม่?
— yo '23

1
@yo 'bash one-liner กลับมาเรียบร้อยแล้ว แต่ผลลัพธ์ที่ออกมานั้นเป็นข้อความแสดงข้อผิดพลาดของแท้ สคริปต์เพียงดึงข้อผิดพลาดจากแหล่งไดรเวอร์เครื่องพิมพ์
— Riot

อาตกลงนั่นเป็นเรื่องยุ่งยากที่ต้องทำ :-)
— yo '23

1
โดยไม่ได้ตั้งใจข้อผิดพลาดหมายความว่ามันจะพิมพ์ต่อไปยังกระดาษติดซึ่งเป็นอันตรายจากไฟไหม้
— Joshua

13

C (++)

หากข้อผิดพลาดในการคอมไพล์เวลานับเป็นข้อผิดพลาดที่นี่ (สมมติว่าไฟล์ชื่อ "crash.c")

#include "crash.c"

int main(){ return 0; }

มันเต็มหน้าจอด้วยสิ่งนี้เมื่อรวบรวม (มี Ctrl-C พร้อม)

                 from crash.c:1,
                 from crash.c:1:
crash.c:3:1: error: redefinition of ‘main’
crash.c:3:1: note: previous definition of ‘main’ was here
In file included from crash.c:1:0,
                 from crash.c:1,
                 from crash.c:1,

ตัวอย่างอื่นที่รวบรวมได้อย่างสมบูรณ์แบบ (ไม่มีคำเตือนใต้-Wallและแสดงให้เห็นถึงความปลอดภัยประเภทที่สวยงามของ C </s>

#include <stdio.h>
int i;

int main(){
  sprintf(NULL, "%s", (char *) (void *) (1/i));
  return 0;
}

ใช้มันให้:

Floating point exception (core dumped)

13

ทับทิม

รู้สึกเหมือนแปลกที่สิ่งนี้สามารถเกิดขึ้นได้ในภาษาระดับสูง

$*<<$*<<$**$/

ผลิต

ArgumentError: recursive array join


10

R

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

[[แก้ไข]] ดูเหมือนว่าสาเหตุของบางส่วนของคำเตือนตลกอยู่ใน RStudio มากกว่า R ต่อ se ดังนั้นมันจึงน่าสนใจน้อยกว่าที่ฉันคิดไว้ครั้งแรก ตัวอย่างแรกคือplot(1:2, NotAGraphicalParameter = "ignore.me")คืออย่างไรก็ตามยังคงสามารถทำซ้ำได้ใน "เปล่า" R และเป็นเรื่องตลกมากพอที่สิทธิของตนเอง [[/ แก้ไข]]

> plot(1:2, NotAGraphicalParameter = "ignore.me")
# produces a nice scatterplot with two points, [1,1] and [2,2]
Warning messages:
1: In plot.window(...) :
  "NotAGraphicalParameter" is not a graphical parameter
2: In plot.xy(xy, type, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
4: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
5: In box(...) : "NotAGraphicalParameter" is not a graphical parameter
6: In title(...) : "NotAGraphicalParameter" is not a graphical parameter
> plot(2:3)
# another nice scatterplot: [2,2] and [3,3] 
# but there should be nothing wrong this time!
# however ...
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: "NotAGraphicalParameter" is not a graphical parameter
2: "NotAGraphicalParameter" is not a graphical parameter
3: "NotAGraphicalParameter" is not a graphical parameter
4: "NotAGraphicalParameter" is not a graphical parameter
5: "NotAGraphicalParameter" is not a graphical parameter
6: "NotAGraphicalParameter" is not a graphical parameter
7: "NotAGraphicalParameter" is not a graphical parameter
8: "NotAGraphicalParameter" is not a graphical parameter
9: "NotAGraphicalParameter" is not a graphical parameter
10: "NotAGraphicalParameter" is not a graphical parameter
11: "NotAGraphicalParameter" is not a graphical parameter
12: "NotAGraphicalParameter" is not a graphical parameter
# but let's try once more:
> plot(2:3)
# yup. no warnings this time. we had to do it twice

มันเหมือนกับที่ R จดจำการดูถูกของเรา แต่ไม่นาน

ฉันไม่สามารถอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น - แต่มันสามารถทำซ้ำได้ ที่จริงแล้วมันเกิดขึ้นทุกครั้งเมื่อคุณจัดหา "ไม่ใช่พารามิเตอร์กราฟิก" ให้กับพล็อต 1 จากนั้นทำพล็อต 2 ด้วยวิธีที่ไร้ที่ติอย่างสมบูรณ์ เป็นเรื่องตลกโดยเฉพาะอย่างยิ่งที่เราได้รับ 12 "ไม่ใช่พารามิเตอร์กราฟิก" คำเตือนสำหรับพล็อตที่สอง แต่เพียง 6 สำหรับคนแรก อีกสิ่งที่ตลกคือถ้าคุณให้ "ไม่ใช่พารามิเตอร์กราฟิก" ด้วยค่า NULL แล้วไม่มีเงื่อนไขถูกโยน:

plot(1:2, Nonsense=NULL)
# no warnings
# however
plot(1:2, Nonsense="gibberish")
# gives the usual 6-pack of warnings

และเพื่อให้ไร้สาระยิ่งขึ้นลองวาดเส้นบนพล็อตที่วาดไว้ก่อนหน้านี้:

plot(1:2)
# you will see the number of warnings growing with each line:
lines(1:2, 1:2, mumbo = 1)
lines(1:2, 1:2, jumbo = 2)
lines(1:2, 1:2, bimbo = 3)
lines(1:2, 1:2, cucaracha = 4)
lines(1:2, 1:2, karaoke = 5)
lines(1:2, 1:2, radiogaga = 6)
lines(1:2, 1:2, reptiles = 7)
lines(1:2, 1:2, cowsonmoon = 8)
lines(1:2, 1:2, stainlessSteelLadderToTheMoon = 9)
lines(1:2, 1:2, frambuesa = 10)
lines(1:2, 1:2, fresa = 11)
lines(1:2, 1:2, limonYNada = 12)
lines(1:2, 1:2, slingsAndArrows = 13)
# ... and now you have 25 warnings:
warnings()

Warning messages:
1: "mumbo" is not a graphical parameter
2: "jumbo" is not a graphical parameter
3: "bimbo" is not a graphical parameter
4: "cucaracha" is not a graphical parameter
5: "karaoke" is not a graphical parameter
6: "radiogaga" is not a graphical parameter
7: "reptiles" is not a graphical parameter
8: "cowsonmoon" is not a graphical parameter
9: "stainlessSteelLadderToTheMoon" is not a graphical parameter
10: "frambuesa" is not a graphical parameter
11: "fresa" is not a graphical parameter
12: "limonYNada" is not a graphical parameter
13: "mumbo" is not a graphical parameter
14: "jumbo" is not a graphical parameter
15: "bimbo" is not a graphical parameter
16: "cucaracha" is not a graphical parameter
17: "karaoke" is not a graphical parameter
18: "radiogaga" is not a graphical parameter
19: "reptiles" is not a graphical parameter
20: "cowsonmoon" is not a graphical parameter
21: "stainlessSteelLadderToTheMoon" is not a graphical parameter
22: "frambuesa" is not a graphical parameter
23: "fresa" is not a graphical parameter
24: "limonYNada" is not a graphical parameter
25: In plot.xy(xy.coords(x, y), type = type, ...) :
  "slingsAndArrows" is not a graphical parameter

สิ่งนี้ควร ไม่ ชนะครั้งใหญ่เว้นแต่ว่าไม่มีความยุติธรรม


1
คุณใช้ R รุ่นใดอยู่ เพราะผมไม่สามารถทำซ้ำแพ็คของคำเตือนที่คุณได้รับกับขวาหลังการใช้plot(2:3) plot(1:2, NotAGraphicalParameter = "ignore.me")คุณต้องการกำหนดบางสิ่งบางอย่างในของคุณ.Rprofile?
— plannapus

1
ดูเหมือนว่านี่เป็นลักษณะเฉพาะของการรัน R ใน Rstudio (ทั้งบน Windows และ Ubuntu) แต่จะไม่เกิดขึ้นเมื่อคุณรัน R ใน linux terminal หรือ windows Rgui
— lebatsnok

ฉันคิดว่าฉันได้เห็นบางสิ่งที่คล้ายคลึงกับฟังก์ชั่นการสร้างแบบจำลอง (lm หรือ glm) โดยไม่มี Rstudio แต่ไม่สามารถทำซ้ำได้ในขณะนี้ (นั่นคือคำเตือนก่อนหน้านี้ขึ้นมาเมื่อไม่เกี่ยวข้องใด ๆ เพิ่มเติม.)
— lebatsnok

9

สคริปต์คำสั่งของ Windows

คำเตือนนี่คือระเบิดส้อม!

สิ่งนี้จะเอาท์พุทขยะคำถามเกี่ยวกับการเลิกถ้าคุณพยายามที่จะออกจากคอนโซลในทางใดทางหนึ่ง

%0|%0|%0

โบนัส:

  • จะทำให้ระบบใช้งานไม่ได้สวยมากจนกระทั่งรีสตาร์ท
  • ป้องกันการเลิกสคริปต์ซึ่งควรเป็นไปไม่ได้

2
โรบินสันจะเป็นอันตรายหรือไม่?
— จาค็อบ

7

qด่าคุณ

q)`u#1 1
'u-fail
q)

`` `u #` `บอกqว่าทุกองค์ประกอบในรายการมีความเป็นเอกลักษณ์ (ดังนั้นมันจึงสามารถสร้างดัชนีที่ใช้แฮชได้ นี่คือสิ่งที่เกิดขึ้นเมื่อมันไม่จริงจริง


1
ภาษาคืออะไร ฉันลองค้นหาภาษา "q insults you" แต่ฉันไม่พบอะไรเลย
— Konrad Borowski

ขออภัยที่เป็นความลับโดยไม่ได้ตั้งใจภาษาคือ [q] ( en.m.wikipedia.org/wiki/ ......นอกจากนี้ยังใช้งานได้ใน k4, BTW
— Aaron Davies

6

วิธีการเกี่ยวกับข้อผิดพลาดการเพิ่มประสิทธิภาพของคอมไพเลอร์:

#include <stdio.h>

#define N 4

int main(void)
{
    int sum;
    int i;
    int arr[N];

    for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
        sum += arr[i];
    }
    printf("%d\n", sum);
    return 0;
}

นี่คือเฉพาะกับ gcc> = 4.7 gcc -O0 -Wallรวบรวมและทำงานได้ดีกับ คอมไพล์ด้วยgcc -O2 -Wallแต่ให้ผลลัพธ์ใน inf-loop

โปรดทราบด้วยว่าวิธี gcc จะเห็นปัญหาเล็กลงNเช่นN = 3:

test.c:11:38: warning: array subscript is above array bounds [-Warray-bounds]
  for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
                                       ^
test.c:12:13: warning: 'arr[0]' is used uninitialized in this function [-Wuninitialized]
  sum += arr[i];
         ^

แต่สิ่งนี้ได้มาจากรายงานบั๊กฉันไม่สามารถจำหมายเลขบั๊กได้


3
นี่เป็นพฤติกรรมที่ไม่ได้กำหนดดังนั้นผู้รวบรวมจึงได้รับอนุญาตให้ทำอะไร แต่มันก็ยังรู้สึกแปลกใจที่คอมไพเลอร์ตัดสินใจเปลี่ยนการมอบหมายนอกอาร์เรย์ในเครื่องที่ไม่เคยใช้และการใช้ค่าที่ไม่ได้ประกาศเป็นลูปไม่สิ้นสุดแม้ว่ามาตรฐาน C จะยอมให้สิ่งนี้ (หลังจากทั้งหมดมันขึ้นอยู่กับพฤติกรรมที่ไม่ได้กำหนด การเข้าถึงarr[N](นอกอาร์เรย์) และการเข้าถึงarr[0](ซึ่งไม่ได้กำหนดค่าเริ่มต้น) เนื่องจากสิ่งใดก็ตามที่ได้รับอนุญาตสำหรับพฤติกรรมที่ไม่ได้กำหนดนี่ไม่ใช่ข้อผิดพลาดในการปรับให้เหมาะสม แต่น่าจะเป็นสิ่งที่ผู้ใช้ต้องการ
— Konrad Borowski

4
นี่ไม่ใช่ข้อผิดพลาดในการปรับให้เหมาะสมของคอมไพเลอร์อย่างชัดเจน UB คือ UB และคอมไพเลอร์จะถูกต้องแม้ว่ามันจะตัดสินใจที่จะกำจัดข้อมูลทั้งหมดของคุณจากฮาร์ดไดรฟ์ของคุณ
— H2CO3

5

ฉันชอบความแปลกประหลาดนี้ใน APL เสมอ:

      ⍝เห็นได้ชัดว่าเป็นข้อผิดพลาดทางไวยากรณ์
      {(]} 3  
ข้อผิดพลาดของ SYNTAX
      {(]} 3

      ⍝ แต่:
      {(]} 1 ÷ 0
ข้อผิดพลาด DOMAIN
      {(]} 1 ÷ 0 

      even ใช้ได้กับฟังก์ชั่นที่กำหนดไว้แบบคงที่
      ∇z← FX
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
ข้อผิดพลาด DOMAIN
      f 1 ÷ 0
     ∧
      f 3
ข้อผิดพลาดของ SYNTAX
f [1] z ← [{]} x     

มันแยกวิเคราะห์ภายในฟังก์ชั่นอย่างขี้เกียจ!


4

PHP

<?php
[][] = 42;

[]ถูกนำมาใช้เพื่อผลักดันองค์ประกอบ อย่างไรก็ตามถ้าคุณใช้มันเพื่อเรียงตามตัวอักษร, PHP ทำให้เกิดข้อผิดพลาดบ้าแม้ว่าคุณจะกำหนดให้มันเพื่อผลักดัน ต้องใช้ PHP> = 5.4 เหมือนก่อนที่คุณจะไม่มีตัวอักษรอาร์เรย์ที่จัดทำดัชนีไว้

เอาท์พุท:

ข้อผิดพลาดร้ายแรง : ไม่สามารถใช้ [] เพื่ออ่านใน[... ] [... ]ที่บรรทัด2


4

หลาม

บล็อกซ้อนกัน

for a in range(26):
 for b in range(26):
  for c in range(26):
   for d in range(26):
    for e in range(26):
     for f in range(26):
      for g in range(26):
       for h in range(26):
        for i in range(26):
         for j in range(26):
          for k in range(26):
           for l in range(26):
            for m in range(26):
             for n in range(26):
              for o in range(26):
               for p in range(26):
                for q in range(26):
                 for r in range(26):
                  for s in range(26):
                   for t in range(26):
                    for u in range(26):
                     for v in range(26):
                      for w in range(26):
                       for x in range(26):
                        for y in range(26):
                         for z in range(26):
                          print a

Python 2.7: SystemError: too many statically nested blocks

รายการอ้างอิงตนเอง

def printList(myList):
    for element in myList:
        if isinstance(element, list):
            printList(myList)
        else:
            print(element)

a = []
a.append(a)
printList(a)

Python 2.7

True ไม่คงที่

ปัญหาในตัวอย่างต่อไปนี้คือใน Python 2.7 TrueและFalseไม่ใช่ค่าคงที่ และTrueและFalseสามารถถูกร่ายไปยัง1และ0:

True=False
a=10/True

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero

Python 2.7:

Intendation

def f(n):
    if n <= 1:
        return n
    else:
        return f(n-1)+f(n-2)

คุณได้รับข้อผิดพลาดหรือไม่?

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 4
    else:
       ^
SyntaxError: invalid syntax

การผสมแท็บและช่องว่างก็โอเคใน Python 2.7 ... แต่ต้องคำนึงถึงระดับการเยื้อง!


1
ตัวอย่างการผสมช่องว่างและตัวสร้างตารางไม่ทำงานอย่างถูกต้องเนื่องจากแพลตฟอร์ม Stack Exchange ไม่อนุญาตให้ใช้ตัวจัดรูปแบบในโค้ด
— Konrad Borowski

@ แก้ไข: ตกลง แต่ฉันคิดว่าคนที่อ่านสิ่งนี้จะได้รับจุด ผู้แก้ไขส่วนใหญ่ไม่แสดงช่องว่าง / แท็บใด (ยกเว้นช่องว่างต่อท้าย) และหากพวกเขาแสดงมันเป็นสีเทาส่วนใหญ่ และในทุก ๆ ภาษา (ยกเว้นช่องว่าง) ช่องว่างนั้นไม่สำคัญตราบใดที่มีอย่างน้อยหนึ่งรายการ
— Martin Thoma

คุณควรเขียนโปรแกรมของคุณในภาษาการเขียนโปรแกรม Whitespace
— Alexander

Python 3 เป็นเรื่องตลกหรือไม่
— Ry-

@minitech ฉันไม่มีความคิด print aนั่นคือสิ่งที่มันควรจะทำอย่างไรกับ
— Justin

3

ฉันจะเริ่ม:

#include <iostream>

using namespace std;

class A
{
public:
    A()
    {
    }

    void doSomethingDiabolical()
    {
        delete this;
    }

    virtual void breakHorribly()
    {
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
    }
};

class B : public A
{
public:
    B() : A()
    {
    }

    void breakHorribly()
    {
        cout << "still alive" << endl;
        ((A *) this)->breakHorribly();
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
        breakHorribly();
        cout << "dead" << endl;
    }
};

int main()
{
    jane();
}

void jane()
{
    cout << "still alive" << endl;
    A * o = new B;
    cout << "still alive" << endl;
    o->breakHorribly();
}

มีการเดาว่าทำไมโปรแกรมนี้จึงขัดข้อง : D

ดูjanerun: http://ideone.com/gtaZ3


1
นี่ไม่ใช่การเรียกซ้ำแบบไม่สิ้นสุดที่ตรงไปตรงมาใช่หรือไม่ B::BreakHorriblyเรียกตัวเองก่อนที่doSomethingDiabolicalจะเรียกดังนั้นจึงdelete thisไม่เคยไปถึง
— marinus

โปรแกรมนี้ระเบิดด้วยเหตุผลหลายประการ พฤติกรรมของมันจะเปลี่ยนแปลงหากคุณลบคำสั่งการพิมพ์ที่แตกต่างกัน อย่างไรก็ตามคุณพูดถูก ฉันไม่ได้มีเวลาที่จะทำซ้ำพฤติกรรมที่ไม่ได้กำหนดฉันมีครั้งเดียว แต่ฉันได้รับการเรียกฟังก์ชันเสมือนบริสุทธิ์ที่รันไทม์
— Wug

2
คุณไม่ได้พูดว่าคุณเคยพิมพ์บางสิ่งบางอย่างโดยบังเอิญdelete thisคุณเป็นอย่างไร
— หยุดหมุนทวนเข็มนาฬิกา

ไม่มันบอบบางกว่านั้นมาก แต่ผลลัพธ์สุดท้ายก็เหมือนกันผู้ทำลายถูกเรียกชั้นเรียนระหว่างการทำหน้าที่สมาชิก
— Wug

3

ทุบตี

ฉันได้รับสิ่งนี้ในวันนี้เมื่อฉันพยายามค้นหาว่าเป็นไปได้ที่จะปกป้องระบบจากrm -rf /หรือไม่

mkdir /tmp/a
mkdir /tmp/a/b
sudo mount --bind /tmp/a /tmp/a/b
rm -rf /tmp/a

ข้อความแสดงข้อผิดพลาดด้วยLANG=C:

rm: WARNING: Circular directory structure.
This almost certainly means that you have a corrupted file system.
NOTIFY YOUR SYSTEM MANAGER.
The following directory is part of the cycle:
  '/tmp/a/b'

คำเตือนนี้จะมาจากการไม่ได้rm bashไม่แน่ใจว่าคุณควรประกาศภาษาใดในชื่อเนื่องจากคุณเคยbashตั้งค่า

2

R

อีกอันที่ไม่ไร้สาระและอีกครั้งเป็นการเตือนมากกว่าข้อผิดพลาด แต่ก็ยังดี:

> sapply(as.list(-1:-51), log)
 [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[20] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[39] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
There were 50 or more warnings (use warnings() to see the first 50)

ฉันชอบบิตสุดท้าย: 50 หรือมากกว่านั้น :)

และคำเตือนจริง:

1: In lapply(X = X, FUN = FUN, ...) : NaNs produced
2: In lapply(X = X, FUN = FUN, ...) : NaNs produced
....
50: In lapply(X = X, FUN = FUN, ...) : NaNs produced

สนุก = สนุก!


1
รหัส Nyan! นั่นมันแปลกจริง ๆ !
— Kroltan

ฉันไม่เห็นสิ่งที่คาดไม่ถึงหรือน่าแปลกใจ บันทึกของผลิตผลเชิงลบ Not A Number (NaN) เท่าที่ควร
— plannapus

2

CPython

import ctypes
import sys
(ctypes.c_char * sys.getsizeof(None)).from_address(id(None))[:4] = '\x00' * 4

ผลลัพธ์:

Fatal Python error: deallocating None

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

ที่ดียิ่งขึ้นในหลาม ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None))3:
— kirbyfan64sos

2

Bash - ความล้มเหลวในการหลบหนีของ counterintuitive

echo "this should definitely work!!!11!"

ผลตอบแทน

-bash: !11: event not found

(การขยายประวัติใน commandline ไม่ได้ป้องกันโดยเครื่องหมายคำพูดคู่)

โบนัส:

echo "I don't know what's gone wrong!! !echo is usually pretty foolproof!-1"

ผลลัพธ์ไม่น่าจะเป็นสิ่งที่คาดหวัง กดขึ้นเพื่อรับคำสั่งอีกครั้งและสังเกตว่ามันเปลี่ยนจากสิ่งที่คุณพิมพ์ หากคุณกดและป้อนสองสามครั้งอาจเป็นไปได้ว่าผลลัพธ์ของคุณจะเริ่มดูน่ากลัว ลองด้วยตัวคุณเอง


2
คำตอบนี้เป็นซ้ำcodegolf.stackexchange.com/a/17776
— Dennis

2

C # - กำเนิด Fibonacci ขี้เกียจ

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<decimal> fib(decimal n = 0, decimal m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m))
        {
            yield return x;
        }
    }
}

รหัสนี้ดูดีใช่มั้ย เครื่องกำเนิดไฟฟ้า Fibonacci เรียบง่ายพอสมควรพร้อมด้วยการเรียกซ้ำและการแจงนับซ้ำ ควรทำงาน.

Nope! การเรียกใช้งานสิ่งนี้จะทำให้เกิด OverflowException นี่เป็นเพราะเราใช้ทศนิยมและหมายเลขฟีโบนักชี 141 (~ 8.1E28) เกินค่าสูงสุดของทศนิยม (~ 7.9E28)

int อย่างไรก็ตามจะไม่ส่ง OverflowException เมื่อคุณเกินค่าสูงสุด แทนที่จะเป็นเช่นนั้นตามที่คาดไว้ล้นไปถึงค่าลบ ดังนั้นถ้าเราแทนที่ int ด้วยทศนิยมเช่นในรหัสต่อไปนี้มันควรจะใช้ได้ใช่ไหม

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<int> fib(int n = 0, int m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m).ToList())
        {
            yield return x;
        }
    }
}

ถ้าคุณอ่านรหัสมันควรจะชัดเจนว่าทำไมมันไม่ทำงาน หากคุณไม่ได้ ... ฉันไม่เพียงแค่เปลี่ยนประเภทจากทศนิยมเป็น int; ฉันแอบเข้าไปที่ ToList () ในคำสั่ง foreach สิ่งนี้จะบังคับให้ตัวแจงนับที่ส่งคืนเพื่อประเมินอย่างกระตือรือร้น สิ่งนี้จะทำให้เกิดการเรียกซ้ำไม่ได้ 141 ครั้ง แต่เป็นการเรียกซ้ำที่ไม่สิ้นสุด จริง ๆ แล้วก่อนที่จะถึงระยะอินฟินิตี้แน่นอนว่าจะล้นสแต็กทำให้รันไทม์เพื่อโยน StackOverflowException (โบนัส: ไม่สามารถจับข้อยกเว้นนี้ได้ดังนั้นจะทำให้การทำงานผิดพลาด)

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