Смішні помилки виконання [закрито]


40

Пишіть програми, які створюють божевільні, незрозумілі, смішні або просто прості помилки в режимі горіха. Помутніння і гоління (нетривалість) не потрібні.

  • рішення, схожі на те, що вони повинні добре працювати, краще.
  • рішення, схожі на те, що вони повинні зламати один шлях, а порушити інший, - краще.
  • рішення, яке не є детермінованим, краще, якщо вони відтворюються іноді.
  • рішення з великою відстані між причиною помилки та проявом є кращими.
  • бонусні бали за помилки, які повинні бути неможливими.
  • бонусні бали за помилки, що призводять до збоїв часу виконання (наприклад, помилка сегмента пітона) або операційної системи.

Одиницею балів є підсумкові рахунки.

Додаток 1

Порушення компілятора теж добре.


2
Зробити Python segfault досить просто:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
— marinus

Петро: ого. Я змінив питання на півдорозі, написавши його: S
— Wug

... що з malbolge чи INTERCAL? Я впевнений, що у них були б якісь божевільні помилки, ймовірно, можна це зробити і з одним символом.
— аколіт

1
Це, безумовно, найкраще посилання для вирішення: killallsoftware.com/talks/wat :-)
— серія

Відповіді:


69

Обов'язковий PHP (який досі не було встановлено станом на 5.4):

<?::

Виходи:

Помилка розбору: помилка синтаксису, несподівана T_PAAMAYIM_NEKUDOTAYIM у рядку 1

Whaa?


12
Мені подобається цей. Це може бути моє улюблене повідомлення про помилку. Крім того, коли мій друг намагався завантажувати свій ноутбук Windows на розділ відновлення, і він перетворив весь екран у біле поле з гігантськими червоними літерами з написанням "ПОМИЛКА".
— Вуг

4
Навмисне, але дивне все-таки: "Паамаїм Некудотайм спочатку здавався б дивним вибором для іменування подвійної двокрапки. Однак під час написання Zend Engine 0.5 (що забезпечує PHP 3), саме це команда Zend вирішила назвати це . Насправді це означає двокрапку - на івриті! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
— Йон Готьє

12
@HansEngel: Так, на івриті це означає подвійну двокрапку. Використовувати англійську мову для кожного маркера, окрім цього, має сенс, тому що ...? Напевно, я просто повинен запитати команду PHP.
— Ри-

Вибачте чувак, але ви просто викликаєте статичний метод / змінну ''(порожній рядок) з класу ''(порожній рядок)
— Ісмаель Мігель

1
@IsmaelMiguel: Це заплутано через іврит, а не тому, що це неправильно.
— Ри-

61

Помилка компіляції Gcc:

int main()
{
        long long long a;
}

помилка: довгий довгий довгий занадто довгий для GCC


6
Вони просто знали, що хтось спробує long long long, якщо longі long longобидва дійсні.
— Конрад Боровський

3
Я думаю, що "a занадто довго!" було б краще повідомлення про помилку, але це все ще чудова відповідь.
— Вуг

52

Командний рядок Windows

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

Вихід:

щасливий був несподіваним в цей час.


1
Я спробував цю команду перевірити результат, але він відобразився ^V:( важкі дні ці
— Fabricio

8
@Fabricio, це було лише натисканням CTRL + V, щоб вставити рядок? У командному рядку "клавіша швидкого доступу" для пасти 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.
— Вуг

7
PHP намагається отримати клас string(який дійсний). Підказки типу (те, що ви робите) працює лише для занять. Оскільки клас stringне існує, він видає помилку.
— Ісмаїл Мігель

Тут ви можете перевірити, як працює ваш код: sandbox.onlinephpfunctions.com/code/…
— Ісмаель Мігель

2
@IsmaelMiguel: Так, я розумію, чому це трапляється, але помилка все ще смішна.
— Конрад Боровський

1
Потім спробуйте array(''=>array()'').
— Ісмаїл Мігель

33

баш

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

І ви б подумали, що баш прийме просте "Привіт, світ!" програма.


Пояснення цього: рядки, передані у подвійних лапки як аргументи програмам в bash, розширюються, тобто `echo hi`перетворюються на hiвнутрішню частину подвійного цитування. !використовується як приставка до позначувачів подій . Отже, Баш намагається оцінити !", але не може знайти посилання, на яке посилаються.
— 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 повертає, коли ви ділите щось на нуль.
— Ільмарі Каронен

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.
— Вованіум

1
Я отримую:make: *** No rule to make target 'love'. Stop.
— agtoever

@agtoever Ви працюєте неправильно.
— Навін

Я розумію: 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)

Ця помилка - Квіне в Баші!

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

Звичайно, ви повинні мати відповідне locale(тут англійською).


1
...На кінці шаблону не було надруковано , тому мені довелося також опустити його в оригінальному введенні.
— Zev Eisenberg

16

CSH

Справді класичний cshжарт:

% make fire?
make: No match.

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 у звичайному місці.

Веселий факт: я одного разу отримав це повідомлення серйозно під час роботи старого стрічкового принтера.


Це повідомлення про помилку чи просто вихід програми?
— yo

1
@yo 'bash one-liner сам по собі успішно повертається, але вихід, який він виробляє, є справжнім повідомленням про помилку; сценарій просто витягує помилку з джерела драйвера принтера.
— Бунт

ах добре, що це складна річ , щоб зробити :-)
— йо »

1
Між іншим, помилка означає, що він продовжує друкувати на застряванні паперу, що є небезпекою пожежі.
— Джошуа

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

Це дуже давно, але для тих, хто пам’ятає BCPL,

GET "LIBHDR"

LET START() = VALOF 
$8
        RESULTIS 0
$)

скаржився б

$8
 ^
"( ) or 8 expected"

10

R

Це технічно не помилка, а попередження, але, проте, це смішно і виникає з цілком езотеричних причин.

[[EDIT]] Здається, що причина деяких кумедних попереджень перебуває в RStudio, а не R per se, тому це менш цікаво, ніж я вперше думав. Перший приклад, тобто plot(1:2, NotAGraphicalParameter = "ignore.me"), все ще відтворюється в "голому" R і досить смішний сам по собі. [[/ EDIT]]

> 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?
— планнапус

1
Схоже, це характерно для запуску R в Rstudio (і в Windows, і в Ubuntu), але не виникає при запуску R в Linux-терміналі або Windows Rgui.
— lebatsnok

Я думаю, що я бачив щось подібне з моделюючими функціями (lm чи glm) без Rstudio, але зараз не можу відтворити це. (Тобто, попередні попередження надходили, коли вже не актуально.)
— lebatsnok

9

Windows Command Script

УВАГА! Це бомба з виделкою!

Це виведе сміттєві питання про вихід, якщо ви намагаєтесь будь-яким чином вийти з консолі.

%0|%0|%0

Бонуси:

  • Зробить систему майже непридатною до перезавантаження
  • Перешкоджає виходу зі сценарію, що має бути неможливим

2
Чи загрожує Робінзон?
— Яків

7

q ображає вас

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

`` u # `` повідомляє, qщо кожен елемент у списку є унікальним (тому він може будувати якийсь індекс на основі хешу, імовірно). це те, що відбувається, коли це насправді не так.


1
Що таке мова? Я намагався шукати мову "q ображає тебе", але нічого не міг знайти.
— Конрад Боровський

Вибачте за те, що ненавмисно криптовалюта, мова є [q] ( en.m.wikipedia.org/wiki/… . Вона також працює в k4, BTW.
— Аарон Девіс

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але призводить до отримання інформаційного циклу.

Також зауважте, як 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](який є неініціалізованим)). Оскільки що-небудь дозволено для невизначеної поведінки, це не помилка оптимізації, але дуже навряд чи буде те, чого хотів користувач.
— Конрад Боровський

4
Це явно не помилка оптимізації компілятора. UB - це UB, і компілятор був би правий, навіть якби вирішив викорінити всі ваші дані з вашого жорсткого диска.
— H2CO3

5

Мені завжди подобалася ця дивацтво в APL:

      ⍝ явно синтаксична помилка
      {(]} 3  
СИНТАКСИЧНА ПОМИЛКА
      {(]} 3

      ⍝ але:
      {(]} 1 ÷ 0
ПОМИЛКА ДОМЕНА
      {(]} 1 ÷ 0 

      ⍝ навіть працює зі статично визначеними функціями
      ∇z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
ПОМИЛКА ДОМЕНА
      f 1 ÷ 0
     ∧
      f 3
СИНТАКСИЧНА ПОМИЛКА
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

Правда не є постійною

Проблема в наступному прикладі полягає в тому, що в 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:

Інтенсивність

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 не дозволяє табуляторам в коді.
— Конрад Боровський

@xfix: Гаразд, але я думаю, що люди, які читають це, розуміють. Більшість редакторів також не показують пробіл / вкладки (за винятком пробілів пробілів), і якщо вони показують, вони більшість часу сірі. І в будь-якій іншій мові (крім білого простору) пробіли не мають значення, доки принаймні один є.
— Мартін Тома

Свої програми слід писати мовою програмування Whitespace.
— Олександр

Хіба що Python 3 - це жарт?
— Ри-

@minitech Я поняття не маю. Ось що це має робити print a.
— Джастін

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

Дивіться janeзапуск: http://ideone.com/gtaZ3


1
Хіба це не досить нескінченна нескінченна рекурсія? B::BreakHorriblyдзвонить перед тим, doSomethingDiabolicalяк називається, тому delete thisніколи не досягається.
— marinus

Ця програма вибухає з великої кількості причин. Його поведінка змінюється, якщо ви видалите різні заяви друку. Однак ти маєш рацію. У мене не було часу відтворювати неозначене поведінку, яке я колись, але я в кінцевому підсумку отримував чистий віртуальний виклик функції під час виконання.
— Вуг

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

FUN = FUN!


1
Nyan Code ?! Ну, це справді дивно!
— Кролтан

Я не бачу нічого несподіваного чи дивного. журнал негативної продукції Не Число (NaN) як слід.
— планнапус

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.

Ще краще в Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
— kirbyfan64sos

2

Bash - контрінтуїтивний збій втечі

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

повертає

-bash: !11: event not found

(розширення історії в командному рядку не запобігається подвійними лапками)

Бонус:

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

Результат навряд чи буде таким, що очікується. Натисніть клавішу вгору, щоб знову отримати команду, і помітьте, що вона змінилася від того, що ви ввели. Якщо натиснути і ввести пару разів, швидше за все, ваш вихід почне виглядати дещо жахливо. Спробуйте самі.


2
Ця відповідь є дублікатом codegolf.stackexchange.com/a/17776 .
— Денніс

2

C # - рекурсивний, ледачий генератор Фібоначчі

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;
        }
    }
}

Цей код добре виглядає, правда? Досить простий генератор Фібоначчі, приправлений деякою рекурсією та лінивим перерахуванням. Треба працювати.

Ні! Якщо це виконати, це спричинить переповнення. Це тому, що ми використовуємо десятковий, і 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. (бонус: цей виняток неможливо спіймати, тому він завершить час виконання)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.