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


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.