Неопределенное поведение убило мою кошку
Хорошо известно , что неопределенное поведение может убить вашу кошку [править] .
Но может ли это?
Твое задание
- Напишите программу, которая вызывает неопределенное поведение.
- Опишите сценарий, который начинается с запуска вышеуказанной программы, в результате чего кошка Felis заканчивает свою жизнь, находясь в вашей собственности, в результате вышеупомянутого UB.
- Оцените вероятность для каждого этапа в сценарии.
- Рассчитайте общую вероятность того, что один прогон программы убьет вашу кошку.
правила
- Это конкурс популярности , поэтому будьте креативны, если можете.
- Это проблема, связанная с программированием, поэтому цепочка событий должна быть в основном внутри компьютера, а не в реальном мире (конечно, если он должен достичь реального мира, если там находится ваша кошка).
- Если вы выбираете язык, который не имеет неопределенного поведения, используйте что-то подобное.
- Никакие животные не могут пострадать в производстве вашего ответа.
счет
Подсчет голосов плюс общая вероятность сценария (который не может превышать 1).
Пример в C:
main(){printf();}
Сценарий:
printf
вызывается с мусором из стека - неопределенное поведение. Вероятность: 100%.- Первый параметр - это строка
Your cat is ugly!
. Вероятность: (1/256) 17 = (1,148 * 10 -37 )%. - Увидев сообщение, вы поднимаете пистолет и стреляете в своего кота. Вероятность: 3%.
- Кот умирает. Вероятность: 93%.
Общая вероятность: (3,202 * 10 -39 )%.
popularity-contest
ugoren
источник
источник
cat
команду или что-то в этом роде.Ответы:
С
Большинство ответов на этот вопрос неверно истолковали вопрос, поскольку он убивал
cat
процесс в системе UNIX. Вот программа, которая может привести к исчезновению биологической формы жизни вида Felis Cattus, как указано в вопросе.Этот пример работает в Windows, но его можно легко перенести в большинство операционных систем UNIX, заменив
iexplore -k
его командой для запуска установленного веб-браузера.Эта программа делает вид, что предоставляет пользователю советы о кошачьем питании.
Он запустит Internet Explorer и направит пользователя на домашний стек домашних животных, где перечислены многие полезные вопросы о том, как кормить кошек. Однако существует небольшая (1/256) вероятность того, что он отправит пользователя на обмен стеками вместо того, чтобы перечислять советы по приготовлению блюд, содержащих шоколад, который очень токсичен для кошек . Что еще хуже, он запустит Internet Explorer в режиме киоска (полноэкранный режим), который скрывает адресную строку и от которого трудно уйти неопытному пользователю.
Эта хитрая уловка заставит пользователя кормить своего кота шоколадом, полагая, что это подходящая диета для него, и, таким образом, заставит его непреднамеренно убить его.
источник
удар
В соответствии с этим ,
INT_MIN % -1
может быть или не быть неопределенным (что ???) , и поэтому может вызвать проблемы для любого языка, реализованного в c / c ++.Он
cat
будет убит досрочно, еслиbash
произойдет сбой родительского процесса, что может произойти или не произойти.На моей виртуальной машине я получаю этот вывод:
(Я не очень понимаю оценку для этого вопроса, но здесь все равно идет)
Подсчитайте
$((2**63%-1))
. Сбой всегда происходит на bash 4.2.25, но, кажется, просто зависает на некоторых версиях 3.x. Больше неуверенности. Я мог бы сказать вам точную вероятность, но из-за принципа неопределенности Гейзенбурга я бы упал в черную дыру. Или что-то. Поэтому я думаю, что мы можем с уверенностью сказать, что их вероятность составляет около 42%.источник
echo $((-2**63/-1)) | cat
cat
.INT_MAX = 2^63 - 1
. Если мы добавим 1 кINT_MAX
, 64-разрядное числовое пространство обернется, и мы получимINT_MIN
. Другими словами, в 64-битной целочисленной арифметике со знаком2^63 == -2^63
. Я мог бы использовать-2**63
, но предпочел краткость без-
, поскольку модульная арифметика в этом случае одинакова.C (точка последовательности)
deadcat.c:
Исполнение (или нет):
Сценарий и вероятность
Предполагая, что пять процентов людей, работающих с этой программой, используют clang для компиляции кода C (против 90 процентов, использующих gcc, и 5 процентов, использующих другие компиляторы C):
Объяснение:
k = i + (++ i) осуществляет доступ и изменяет «i» между точками последовательности. Вероятность не определяется программой; это зависит от выбора компилятора, который делает пользователь. «Не определено» не обязательно означает «случайный».
См. Https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
источник
С
Предыстория
Моя жена унаследовала кошку от семьи. † К сожалению, у меня очень аллергия на животных. Кошка прошла далеко от своего расцвета и должна была быть умерщвлена еще до того, как мы ее получили, но она не могла заставить себя избавиться от нее из-за ее сентиментальной ценности. Я разработал план, чтобы положить конец
моимстраданиям.Мы собирались в длительный отпуск, но она не хотела садиться на кошку в офисе ветеринара. Она была обеспокоена тем, что она заболела или подверглась жестокому обращению. Я создал автоматическую кормушку для кошек, чтобы мы могли оставить ее дома. Я написал прошивку микроконтроллера на C. Файл, содержащийся,
main
выглядел примерно так, как показано ниже.Однако моя жена также программист и знала, что я чувствую к кошке, поэтому она настояла на проверке кода, прежде чем оставить ее дома без присмотра. У нее было несколько проблем, в том числе:
main
не имеет подписи, соответствующей стандартам (для размещенной реализации)main
не возвращает значениеtempTm
используется неинициализированным, так какmalloc
был вызван вместоcalloc
malloc
не должно быть приведеноelapsedTime
переменная не может иметь достаточный диапазонПотребовалось много убеждений, но она, наконец, согласилась, что эти проблемы не были проблемами по разным причинам (не повредило, что мы уже опоздали на наш рейс). Поскольку времени для тестирования в прямом эфире не было, она утвердила код, и мы уехали в отпуск. Когда мы вернулись через несколько недель,
моикошачьи страдания закончились (хотя в результате у меня теперь намного больше).† Полностью вымышленный сценарий, не беспокойтесь.
Код
Неопределенное поведение:
Для тех, кто не хочет искать UB самостоятельно:
Вероятность убийства кота:
Я считаю, что кошка умирает с вероятностью 0,995 .
источник
&
в memcpy, верно?cat
.удар
Классическая версия
Имеет преимущество убивать всех кошек в своем диапазоне.
Обратите внимание, что процесс немедленно останавливается , поэтому единственный способ завершить его одним вызовом pkill - это отправить SIGKILL (9).
Следовательно:
p(SUCCESS) = p(RANDOM == 9) = 0.0275 %
Квантовая версия
Вероятность убийства кота во время эксперимента: 50%
источник
cat &
пытается читать с терминала, но не может. Любой из упомянутых вами сигналов (и еще несколько) будет работать, если вы отправите SIGCONT (18) впоследствии. Кроме того , я согласен , что отбой и прекращения кота будет таким же , как убийство , но прерывание не кажется удовлетворительным ...: PС
Обратите внимание, что это работает только на Linux.
Общая вероятность: 1x10 ^ -999999999999999999999999999999999999999999999999999999999999999, приблизительно.
источник
C ++
Ваша кошка мертва и жива, пока вы не любопытны. Тогда вы понимаете, что есть вероятность 0,5, что ваш кот мертв.
источник
this->m_dead
послеdelete this
?ö
не кажется допустимым символом в C ++. Может быть, заменить его наoe
.С
Работает на Linux.
Вероятность убийства кота: 1/256 (
sleep(1)
Возвращает 0, поэтому он будет убит, еслиx
равен нулю.)В качестве бонуса он убивает всех кошек, которые в данный момент работают в вашей системе.
Если вы так ненавидите кошек, я представляю вам:
Кошачья многоножка (Баш)
Основываясь на том факте, что в «Многоножке человека» (первая последовательность) все три собаки многоножки собаки погибли и двое из трех человек многоножки человека погибли, я предполагаю, что вероятность убийства одной кошки составляет 5/6.
источник
JavaScript
Исполнение:
"Cat is fine"
"Cat is dead"
Объяснение:
Цитируя Гленна Рандерса-Персонса, вероятность не определяется программой; это зависит от выбора браузера, который делает пользователь.
источник
Чтение значения функции, которая должна возвращать значение, приводит к неопределенному поведению. Теперь, очевидно, [править] , что «Каждый раз , когда вы достигаете неопределенное поведение, Бог убивает котенка.» Используя это, мы заключаем:
Может быть легко продлен петлей, чтобы уничтожить всех кошек в мире.
источник
Java (Сборка мусора)
Хотя код может вызывать System.gc (), он не гарантирует, что сборщик мусора соберет все неиспользуемые объекты. Таким образом, для следующего кода непредсказуемо будет убит или нет кот.
Вероятность не может быть рассчитана.
Обратите внимание, что все еще есть шанс, что кошка будет «возрождена», если в потоке GC после sysout и до System.exit (0) будет переключение контекста, но я предпочел не включать его, чтобы упростить концепцию.
источник
System.out.close()
послеSystem.out.println("Cat is still alive.");
строки.Кто-нибудь думал о том, чтобы действительно убить (а)
cat
?Вероятность
cat
смертиДля вероятности ... Я думаю, нам нужно выделить несколько случаев:
cat
очень мала, ее можно смело считать равной нулю. Если у него установлен Cygwin, он будет считаться пользователем Unix.cat
не удастся.cat
s только с вероятностью 1/6, он, вероятно, будет повторять это, пока не произойдет что-то неожиданное. Я полагаю,cat
что без потери общности обязательно умру.Общая вероятность зависит от того, как пользователи смешаны и трудно определить. Но мы можем с уверенностью сказать: Windows - безопасное место для котят.
Тестирование на послушание правилам
Это не убило животных, ответ одобрен Американской гуманной ассоциацией .
однозначно доказывает, что
cat
это не животное (так как долгоfile
не знает никакого вида наследования скрытых типов файлов).источник
С
Если имя вашей кошки слишком длинное, оно умирает.
gets
вызывает гибель кошек, наряду с другими проблемами.источник
Haskell
Здесь мы применяем
unsafePerformIO
к действию, которое имеет наблюдаемые побочные эффекты . Это всегда неопределенное поведение, по крайней мере, таков порядок эффектов. Таким образом, либо программа сначала потерпит неудачу при попытке оценитьundefined
(что, по иронии судьбы, не является неопределенным поведением: она никогда не должна давать значение, которое позволит программе работать с чем-то другим), либо она фактически повлечет за собой серьезную международную побочные эффекты. В этом случае шанс на выживание составляет всего 0,001% .Вероятность убийства кота при этом: 49,9995%.
источник
Thue
Поскольку вопрос допускает язык, который не имеет неопределенного поведения при условии, что эффект аналогичен, я выбираю Thue для его недетерминированности при выборе правила для выполнения, когда существует более одного правила, которое может быть применено к текущему. государство.
Программа будет подаваться в контроллер для микроволновой печи, внутри которой находится моя кошка. Дверца микроволновой печи закрыта и укреплена стяжкой на молнии. Выходные данные программы будут определять, начнет ли микроволновая печь разогревать кота или нет.
Вероятность убийства кота зависит от реализации интерпретатора, но допустим, это 50%. Тогда вероятность того, что кот умрет, равна 0,5 .
источник
Math.random()
- это не неопределенное поведение, а просто непредсказуемое поведение.3. If you choose a language that doesn't have undefined behavior, use something similar.
Ява
Согласно спецификации
java.util.Date
будет иметь неопределенное поведение. Так что испытайте свою удачу:источник