Một lỗi không cố ý nhưng gây ra sự cố [đã đóng]


19

Có một loạt các câu hỏi xoay quanh khái niệm này, nhưng tất cả những câu hỏi này dường như chỉ liên quan đến việc gây ra sự cố, dẫn đến nhiều câu trả lời được thiết kế rõ ràng để gây ra sự cố. Vì vậy, thách thức tôi đặt ra cho bạn là viết một số mã hợp lý (mặc dù mã mà tôi cho là "ý định" là do bạn để lại cho bạn), điều đó làm sập cả hệ điều hành đích, hoặc chính nó, theo cách không rõ ràng ngay lập tức. (Tôi nhận ra rằng những gì được coi là "rõ ràng ngay lập tức" là chủ quan, nhưng hy vọng thách thức vẫn rõ ràng hợp lý).

Người chiến thắng là câu trả lời có nhiều phiếu nhất sau 5 ngày.


Đã xóa thử thách mã thẻ vì không có tiêu chí khách quan nào được đưa ra.
Howard

2
Đã có quá nhiều lần xuất hiện trong số này trong mã thực tế của tôi . Tôi không thể nhớ bất cứ ai trong số họ, mặc dù.
Joe Z.

Liên quan: Cuộc thi C Underhanded có một loạt vấn đề với mục tiêu tương tự và một số giải pháp khá thông minh cho chúng.
FireFly

1
Tôi đang bỏ phiếu để đóng câu hỏi này dưới dạng ngoài chủ đề vì các thử thách ngầm không còn thuộc chủ đề trên trang web này. meta.codegolf.stackexchange.com/a/8326/20469
mèo

Câu trả lời:


30

C, linux. Hệ thống gặp sự cố nếu chạy bằng 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 */
}

Bằng cách thay đổi !=thành =!, một so sánh vô tội được biến thành một bài tập. Và cho rằng pid 1 là init, và giết chết initgây ra sự hoảng loạn kernel, đây không phải là mã bạn muốn chạy như root :)


1
init bỏ qua SIGKILL, đến hoảng loạn hạt nhân, bạn phải gửi nó SIGSEGV, tín hiệu 11
MultiplyByZer0

1
À, chuột. Chỉnh sửa để thay đổi, nhưng điều đó làm cho nó ít phức tạp hơn nhiều. SIGTERM cũng sẽ làm việc?
Dennis Kaarsemaker


3
Tôi sẽ ẩn SIGSEGVbằng cách sử dụng mã số. Rốt cuộc, đó có thể là một sai lầm.
Konrad Borowski

Tôi thích ý tưởng đó, đã được chỉnh sửa :)
Dennis Kaarsemaker

27

C #

Chúng ta hãy khởi tạo một danh sách các byte với mỗi giá trị byte từ 0 đến 255.

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

Hết bộ nhớ? Tôi nhớ lại rõ ràng có hơn 256 byte được cài đặt ...

Làm hỏng

Một byte sẽ luôn nhỏ hơn hoặc bằng 255. Bổ sung kết thúc tốt đẹp từ 255 đến 0.


3
Này đã cho tôi còn hơn nó nên đã tìm ra
Hannesh

Trình biên dịch C # không cảnh báo bạn rằng bạn là pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf? (rot13'd để không làm hỏng câu đố)
Dennis Kaarsemaker

@Dennis có lẽ là không, vì lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag và dhrfgvba vf n inyvq vag.
wchargein

2
@DennisKaarsemaker Nó cảnh báo bạn nếu lbh hfr 'yrff-guna gjb svsgl fvk' đó là lý do tại sao tôi không làm điều đó. Không có cảnh báo ở đây mặc dù.
Kendall Frey

2
Đây là một giải mã / bộ mã hóastr.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;
}

(Cảnh báo trình biên dịch sẽ cung cấp cho nó đi.)


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

Làm việc nhanh chóng, ngoại trừ thực tế là thiếu dấu chấm phẩy trên dòng tôi đánh dấu bằng một nhận xét khiến nó phân tích sai và sụp đổ.

Thêm một dấu chấm phẩy ở cuối dòng đó sẽ sửa nó.


0

C ++

Nhập tên và lưu trữ chúng trong một vector. In tên khi nhập giá trị cờ. Hỏi nếu người dùng nghĩ về nhiều tên hơn; nếu vậy, nhập tên.

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

Đối với người dùng không phải C ++, Java, C, lỗi nằm ở câu lệnh print()s for. Nó phải for (int i = 0; i < names.size(); i++). Đây là một lỗi dễ dàng để thực hiện và bỏ qua (cho đến khi bạn nhận được thông báo trình biên dịch) bởi vì nó chỉ có 1 ký tự và bởi vì toán tử> = đôi khi được yêu cầu trong forcác vòng lặp.


Dunno, phát hiện ra nó ngay khi bắt đầu đọc. Có lẽ sẽ tốt hơn để đặt print()một nơi nào đó sau này trong mã, để người đọc sẽ cảm thấy hơi mệt mỏi trước khi mắc lỗi :)
Ruslan

0

GTB

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

Crashes máy tính vì [_+nên ["_"+, nhưng vì nó không phải là, các máy tính chạy ra khỏi bộ nhớ, khả năng thanh toán bù trừ RAM một cách sai lầm.


3
["_"+trông giống như một khuôn mặt có chút khó chịu với tôi
corsiKa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.