Bug yang tidak disengaja tetapi menyebabkan crash [ditutup]


19

Ada sejumlah pertanyaan yang berputar di sekitar konsep ini, tetapi semua ini tampaknya hanya melibatkan menyebabkan crash, menghasilkan banyak jawaban yang sangat jelas dirancang untuk menyebabkan crash. Jadi tantangan yang saya tetapkan untuk Anda adalah menulis beberapa kode yang masuk akal (meskipun apa yang seharusnya disebut "niat" oleh kode itu saya serahkan kepada Anda), yang membuat crash seluruh OS target, atau hanya sendiri, dengan cara yang tidak segera jelas. (Saya menyadari bahwa apa yang dianggap sebagai "segera jelas" adalah subyektif, tetapi semoga tantangannya masih cukup jelas).

Pemenangnya adalah jawaban dengan suara terbanyak setelah 5 hari.


Tantangan kode tag dihapus karena tidak ada kriteria objektif yang diberikan.
Howard

2
Ada terlalu banyak kejadian di dalam kode saya yang sebenarnya . Tapi aku tidak bisa mengingat mereka.
Joe Z.

Terkait: Kontes C Underhanded memiliki banyak masalah dengan tujuan yang sama, dan beberapa solusi yang cukup pintar untuk mereka.
FireFly

1
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena tantangan curang tidak lagi pada topik di situs ini. meta.codegolf.stackexchange.com/a/8326/20469
cat

Jawaban:


30

C, linux. Sistem crash jika dijalankan sebagai 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 */
}

Dengan mengubah !=ke =!, perbandingan yang tidak bersalah diubah menjadi tugas. Dan mengingat pid 1 adalah init, dan membunuh initmenyebabkan kepanikan kernel, ini bukan kode yang ingin Anda jalankan sebagai root :)


1
init mengabaikan SIGKILL, untuk panik kernal Anda harus mengirimkannya SIGSEGV, sinyal 11
MultiplyByZer0

1
Ah, tikus. Diedit untuk diubah, tetapi itu membuatnya jauh lebih tidak mencolok. Apakah SIGTERM akan bekerja juga?
Dennis Kaarsemaker


3
Saya akan bersembunyi SIGSEGVdengan menggunakan kode numerik. Bagaimanapun, itu bisa saja kesalahan.
Konrad Borowski

Saya suka ide itu, diedit :)
Dennis Kaarsemaker

27

C #

Mari kita inisialisasi daftar byte dengan setiap nilai byte dari 0 hingga 255.

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

Kehabisan memori? Saya ingat dengan jelas memiliki lebih dari 256 byte diinstal ...

Spoiler:

Satu byte akan selalu kurang dari atau sama dengan 255. Penambahan membungkus dari 255 ke 0.


3
Ini membutuhkan waktu lebih lama dari yang seharusnya
Hannesh

Bukankah kompiler C # memperingatkan Anda bahwa Anda pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf? (rot13'd untuk tidak merusak teka-teki)
Dennis Kaarsemaker

@Dennis mungkin tidak, karena lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag va dhrfgvba vf n inyvq vag.
wchargin

2
@DennisKaarsemaker Ini memperingatkan Anda jika lbh hfr 'yrff-guna gjb svsgl fvk' itulah sebabnya saya tidak melakukan itu. Tidak ada peringatan di sini.
Kendall Frey

2
Berikut ini decode / encoderstr.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

C

#include <stdio.h>

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

(Peringatan kompiler akan memberikannya.)


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))

Bekerja quicksort, kecuali fakta bahwa kurangnya titik koma pada baris yang saya tandai dengan komentar menyebabkannya salah mengurai dan macet.

Menambahkan titik koma di akhir baris itu memperbaikinya.


0

C ++

Masukkan nama dan simpan dalam vektor. Mencetak nama saat nilai flag masuk. Bertanya apakah pengguna memikirkan lebih banyak nama; jika demikian, masukkan nama.

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

Untuk non-C ++, Java, pengguna C, kesalahan dalam print()s forpernyataan. Seharusnya begitu for (int i = 0; i < names.size(); i++). Ini adalah kesalahan mudah untuk dibuat dan diabaikan (sampai Anda mendapatkan pesan kompiler) karena hanya 1 karakter dan karena operator> = kadang-kadang diperlukan dalam forloop.


Tak tahu, melihatnya tepat di awal membaca. Mungkin akan lebih baik untuk menempatkan print()suatu tempat nanti dalam kode, sehingga pembaca akan sedikit lelah sebelum sampai pada kesalahan :)
Ruslan

0

GTB

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

Hancurkan kalkulator karena [_+seharusnya ["_"+, tetapi karena tidak, kalkulator kehabisan memori, berpotensi membersihkan RAM dengan cara yang salah.


3
["_"+terlihat seperti wajah yang sedikit kesal dengan saya
corsiKa
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.