ข้อผิดพลาด 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.