Невмисний вигляд, але викликає аварії [закритий]


19

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

Переможець - це відповідь з найбільшою кількістю голосів через 5 днів.


Видалений код тегу-виклик, оскільки не вказано об'єктивного критерію.
Говард

2
У моєму фактичному коді було занадто багато випадків . Я не можу згадати жодного з них.
Джо З.

Пов’язано: Конкурс "Недосвідчений С" має купу проблем із подібною метою та деякі досить розумні рішення для них.
FireFly

1
Я голосую за те, щоб закрити це питання як позатематичне, тому що недостатньо важкі виклики вже не є актуальними на цьому веб-сайті. meta.codegolf.stackexchange.com/a/8326/20469
кіт

Відповіді:


30

C, linux. Система збоїв, якщо вона працює як root

/* Fork child process, wait 5 seconds and kill it */
pid_t pid = fork();
if(pid =! 0) {
    /* Parent */
    sleep(5);
    kill(pid, 11);
}
else {
    /* Child process. Would contain some code */
}

Змінившись !=на =!, невинне порівняння перетворюється на завдання. А враховуючи, що Pid 1 є init, а вбивство initвикликає паніку ядра, це не код, який ви хотіли б запустити як root :)


1
init ігнорує SIGKILL, для паніки ядра вам потрібно надіслати його SIGSEGV, сигнал 11
MultiplyByZer0

1
Ах, щури. Відредаговано для зміни, але це робить його набагато менш непомітним. Чи працюватиме також SIGTERM?
Денніс Каарсемейкер


3
Я б ховав SIGSEGV, використовуючи числовий код. Зрештою, це могло бути помилкою.
Конрад Боровський

Мені подобається ця ідея, відредагована :)
Денніс Каарсемейкер

27

C #

Давайте просто ініціалізуємо список байтів із кожним значенням байта від 0 до 255.

List<byte> bytes = new List<byte>();
for (byte i = 0; i <= 255; i++)
{
    bytes.Add(i);
}

Недостатньо помяті? Я чітко пам'ятаю, що встановлено понад 256 байт ...

Спойлер:

Байт завжди буде менше або дорівнює 255. Додавання обертається приблизно від 255 до 0.


3
Це зайняло у мене більше часу, ніж це повинно було з'ясувати
Ханнеш

Хіба компілятор C # не попереджає, що ви pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf? (rot13'd не зіпсувати загадку)
Денніс Каарсемейкер

@Dennis, певно, ні, тому що lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag va dhrfgvba vf n inyvq vag.
wchargin

2
@DennisKaarsemaker Це попереджає вас, якщо lbh hfr 'yrff-guna gjb svsgl fvk', тому я цього не робив. Тут немає жодних попереджень.
Кендалл Фрей

2
Ось декодер / кодерstr.toLowerCase().split('').map(function(c) { return c < 'a' || c > 'z' ? c : String.fromCharCode(((c.charCodeAt(0) - 'a'.charCodeAt(0) + 13) % 26) + 'a'.charCodeAt(0)); }).join('')
MosheK

7

С

#include <stdio.h>

int main(void) {
   fputs(stdout, "Hello, world!\n");
   return 0;
}

(Попередження компілятора видадуть це.)


3

JavaScript

var arr = [3,6,1,54,2,-4,8,10,3,7]
function qs(a) {
    if (a.length < 2) return a
    var part = a.shift()
    var higher = [], lower = []
    for (var i = 0; i < a.length; i ++) {
        var x = a[i] // *** THIS LINE ***
        (x < part ? lower : higher).push(x)
 }
    return qs(lower).concat([part]).concat(qs(higher))
}
alert(qs(arr))

Працюючий кварцит, за винятком того, що відсутність крапки з комою в рядку, який я позначив коментарем, призводить до того, що він неправильно розібрався та збій.

Додавання крапки з комою в кінці цього рядка виправляє його.


0

C ++

Вводить імена та зберігає їх у векторному. Друкує імена при введенні значення прапора. Запитує, чи придумав користувач більше імен; якщо так, вводить імена.

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void print(const vector<string>& v) {

  for (int i = 0; i <= names.size(); i++)
    cout << v[i] << endl;
}

void input(vector<string>& v) {

  string tmp;

  cout << "Enter a list of names seperated by returns: ";

  do {
    getline(cin, tmp);

    if (tmp != "-1")
      v.push_back(tmp);

  } while (tmp != "-1");

  print(v);
}

int main() {

  vector<string> names;

  string tmp;

  do {
    input(names);

    cout << "Do you have any more names to input (y or n)? ";
    cin >> tmp;

  } while (tmp == "y");

  return 0;
}

Для користувачів, що не належать до C ++, Java, C, помилка є у операторі print()s for. Це повинно бути for (int i = 0; i < names.size(); i++). Це зробити просту помилку та пропустити її (поки ви не отримаєте повідомлення компілятора), оскільки вона містить лише 1 символ і тому що оператор> = іноді потрібен в forциклі.


Данно, помітив це прямо на початку читання. Можливо, було б краще покласти print()десь пізніше код, щоб читач трохи втомився, перш ніж прийти до помилки :)
Руслан

0

GTB

:""→_[_+"+"→_]

Збиває калькулятор тому, що [_+має бути ["_"+, але оскільки його немає, у калькулятора не вистачає пам'яті, що потенційно може очистити оперативну пам’ять неправильно.


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