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


40

Пишите программы, которые производят сумасшедшие, неясные, смешные или просто сумасшедшие ошибки времени выполнения. Запутывание и Golfitude (краткость) не требуется.

  • решения, которые выглядят так, как будто они должны работать нормально, лучше.
  • решения, которые выглядят так, как будто они должны сломать один путь, но сломать другой, лучше.
  • Решения, которые являются недетерминированными, лучше, если они иногда воспроизводимы.
  • решения с большим расстоянием между причиной ошибки и проявлением лучше.
  • бонусные баллы за ошибки, которые должны быть невозможны.
  • бонусные баллы за ошибки, которые приводят к сбою среды выполнения (например, ошибки сегмента Python) или операционной системы.

Единицей оценки должны быть голоса.

Приложение 1

Неправильное поведение компилятора тоже хорошо.


2
Сделать Python segfault легко:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Питер: упс. Я перепрофилировал вопрос наполовину, написав его: S
Wug

... как насчет malbolge или INTERCAL? Я почти уверен, что у них будут какие-то довольно безумные ошибки, вероятно, это можно сделать и с одним символом.
помощник

1
Это определенно лучшая ссылка для решения проблемы: destroyallsoftware.com/talks/wat :-)
серия

1
Возможный дубликат stackoverflow.com/q/1146014/736054 .
Конрад Боровски

Ответы:


69

Обязательный PHP (который до сих пор не исправлен на 5.4):

<?::

Выходы:

Ошибка разбора: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM в строке 1

Whaa?


12
Мне нравится этот. Это может быть моим любимым сообщением об ошибке. Помимо одного раза, мой друг попытался загрузить свой ноутбук с Windows на раздел восстановления, и он превратил весь экран в белый ящик с гигантскими красными буквами, на которых написано «ОШИБКА».
Вуг

4
Намеренно, но, тем не менее, странно: «На первый взгляд Paamayim Nekudotayim может показаться странным выбором для обозначения двойного двоеточия. Однако при написании Zend Engine 0.5 (который поддерживает PHP 3) команда Zend решила назвать его Это на самом деле означает двойное двоеточие - на иврите! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Джон Готье

12
@HansEngel: Да, на иврите это означает двоеточие. Использование английского для каждого токена, кроме этого, имеет смысл, потому что ...? Я думаю, мне просто нужно спросить команду PHP.
Ry-

Извините, чувак, но вы просто вызываете статический метод / переменную ''(пустая строка) из класса ''(пустая строка)
Исмаэль Мигель

1
@IsmaelMiguel: Это сбивает с толку из-за иврита, а не потому, что это неправильно.
Ry-

61

Ошибка компиляции GCC:

int main()
{
        long long long a;
}

ошибка: длинный длинный длинный слишком длинный для GCC


6
Они просто знали, что кто-то попробует long long long, если longи long longоба действительны.
Конрад Боровски

3
Я думаю, что "это слишком долго!" было бы лучше сообщение об ошибке, но это все еще отличный ответ.
Вуг

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
Какого черта php.
Вуг

7
PHP пытается получить класс string(который действителен). Подсказка типов (то, что вы делаете) работает только для классов. Поскольку класс stringне существует, он выдает ошибку.
Исмаэль Мигель

Здесь вы можете проверить, что ваш код работает правильно: sandbox.onlinephpfunctions.com/code/…
Исмаэль Мигель

2
@IsmaelMiguel: Да, я понимаю, почему это происходит, но, на мой взгляд, ошибка все еще нелепа.
Конрад Боровски

1
Тогда попробуй array(''=>array()'').
Исмаэль Мигель

33

удар

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

И вы могли бы подумать, что bash примет простое «Привет, мир!» программа.


Объяснение этого: строки, переданные в двойных кавычках в качестве аргументов программам в bash, раскрываются, то есть `echo hi`превращаются во hiвнутрь строки в двойных кавычках. !используется в качестве префикса для указателей событий . Итак, bash пытается оценить !", но не может найти упомянутое событие.
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

При использовании 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 Prompt

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. На ДОСе я получаю make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Баш (ошибка Куайна)

Эта ошибка - Quine in Bash!

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

Конечно, вы должны иметь соответствующие locale(английский здесь).


1
Мой не напечатал ...в конце, поэтому я должен был опустить его в исходном вводе, а также.
Зев Айзенберг

16

CSH

Действительно классная cshшутка:

% make fire?
make: No match.

15

Баш - точное воссоздание редкого исторического сообщения об ошибке

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 был распакован в обычном месте.

Интересный факт: я однажды получил это сообщение всерьез, когда запустил старый ленточный принтер.


Это сообщение об ошибке или просто вывод программы?
лет»

1
@yo 'однострочный bash сам возвращается успешно, но вывод, который он выдает, является подлинным сообщением об ошибке; скрипт просто извлекает ошибку из источника драйвера принтера.
Бунт

Ах, хорошо, это сложно сделать :-)
'

1
Между прочим, ошибка означает, что она продолжает печатать до замятия бумаги, что представляет опасность пожара.
Джошуа

13

С (++)

Если ошибки во время компиляции считаются, вот одна (при условии файла с именем «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

р

Технически это не ошибка, а предупреждение, но, тем не менее, это смешно и происходит по совершенно эзотерическим причинам.

[[EDIT]] Кажется, что причина некоторых частей забавных предупреждений кроется в RStudio, а не в R, так что это менее интересно, чем я думал. Первый пример, т. 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?
plannapus

1
Похоже, это специфично для запуска R в Rstudio (как в Windows, так и в Ubuntu), но не происходит, когда вы запускаете R в терминале Linux или Windows Rgui.
lebatsnok

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

9

Командный скрипт Windows

ВНИМАНИЕ, это вилочная бомба!

Это выведет ненужные вопросы о выходе, если вы попытаетесь выйти из консоли каким-либо образом.

%0|%0|%0

Бонусы:

  • Сделает систему практически непригодной для использования до перезагрузки
  • Предотвращает выход из скрипта, что должно быть невозможно

2
Опасность Уилл Робинсон?
Джейкоб

7

д оскорбляет тебя

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

`` `u #` `говорит qо том, что каждый элемент в списке уникален (поэтому он может строить своего рода индекс на основе хеша, предположительно). это то, что происходит, когда это на самом деле не так.


1
Какой язык? Я пытался найти язык "q оскорбляет тебя", но ничего не смог найти.
Конрад Боровски

Извините за непреднамеренную загадочность, язык [q] ( en.m.wikipedia.org/wiki/… . Он также работает в k4, кстати.
Аарон Дэвис

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 

      Even работает даже со статически определенными функциями
      ∇z ← FX
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
ОШИБКА ДОМЕНА
      f 1 ÷ 0
     ∧
      F 3
СИНТАКСИЧЕСКАЯ ОШИБКА
f [1] z ← [{]} x     

Он разбирает внутреннюю часть функций лениво!


4

PHP

<?php
[][] = 42;

[]используется для того, чтобы подтолкнуть элементы. Однако, если вы используете его для литерала массива, PHP выдаст сумасшедшее сообщение об ошибке, даже если вы назначите его для push. Требуется 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:

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

@xfix: Хорошо, но я думаю, что люди, которые читают это, понимают суть. Большинство редакторов также не отображают пробелы / табуляции (за исключением конечного пробела), и если они показывают его, то в большинстве случаев оно серое. И на любом другом языке (кроме пробелов) пробелы не имеют значения, если есть хотя бы один.
Мартин Тома

Вы должны писать свои программы на языке программирования Whitespace.
Александр

Является ли Python 3 шуткой?
Ry-

@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никогда не достигается.
Марин

Эта программа взрывается по большому количеству причин. Его поведение меняется, если вы удаляете различные операторы печати. Тем не менее, вы правы. У меня не было времени воспроизвести неопределенное поведение, которое у меня было однажды, но в итоге я получил чисто виртуальный вызов функции во время выполнения.
Вуг

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

р

Еще один, который не смешен и, опять же, скорее предупреждение, чем ошибка, но все же приятно:

> 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
Нян Кодекс ?! Ну, это действительно странно!
Kroltan

Я не вижу ничего неожиданного или удивительного. журнал отрицательных продуктов, а не число (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.

Еще лучше в Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Баш - нелогичный побег неудачи

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

Этот код выглядит хорошо, верно? Довольно простой генератор Фибоначчи, приправленный некоторой рекурсией и ленивым перечислением. Должно сработать.

Нет! Запуск этого вызовет 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. (бонус: это исключение не может быть перехвачено, поэтому это приведет к краху среды выполнения)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.