İstenmeyen görünen ancak kilitlenmeye neden olan bir hata [kapalı]


19

Bu kavramın etrafında dönen bir dizi soru var, ancak bunların hepsi sadece bir çökmeye neden oluyor gibi görünüyor ve bu da bir çökmeye neden olmak için çok açık bir şekilde tasarlanmış birçok cevapla sonuçlanıyor. Bu yüzden size ayarladığım zorluk, bazı makul kodlar yazmak (her ne kadar "niyet" varsayılan olarak size kalmış olsa da), ya tüm hedef OS, ya da sadece kendisi, hemen açık olmayan bir şekilde çöküyor. ("Hemen bariz" olarak nitelendirilen şeyin öznel olduğunu, ancak umarım zorluğun hala makul olduğunu anlıyorum).

Kazanan 5 gün sonra en çok oy alan cevaptır.


Herhangi bir objektif kriter olmadığı için etiket kodu meydan okuması kaldırıldı.
Howard

2
Gerçek kodumda bunlardan çok fazla oldu . Yine de hiçbirini hatırlayamıyorum.
Joe Z.10

İlgili: Underhanded C Yarışması'nda benzer bir hedefe sahip bir grup sorun ve bunlara oldukça akıllı çözümler var.
FireFly

1
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü el altında kalan zorluklar artık bu sitede konuyla ilgili değil. meta.codegolf.stackexchange.com/a/8326/20469
kedi

Yanıtlar:


30

C, linux. Kök olarak çalıştırıldığında sistem çöküyor

/* 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 */
}

Değiştirerek !=için =!, masum bir karşılaştırma bir görev haline getirilmiştir. Ve pid 1 olduğu initve öldürme initbir çekirdek paniğine neden olduğu göz önüne alındığında , bu root olarak çalıştırmak istediğiniz kod değildir :)


1
init SIGKILL'i görmezden geliyor, kernal paniğe SIGSEGV göndermelisiniz, sinyal 11
MultiplyByZer0

1
Ah, sıçanlar. Değiştirmek için düzenlendi, ancak bu çok daha az göze çarpıyor. SIGTERM de çalışır mı?
Dennis Kaarsemaker


3
SIGSEGVSayısal kod kullanarak saklanırdım . Sonuçta, bir hata olabilirdi.
Konrad Borowski

Bu fikri beğendim, düzenlendi :)
Dennis Kaarsemaker

27

C #

Sadece 0 ile 255 arasında her bayt değerine sahip bir bayt listesi başlatalım.

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

Bellek yetersiz? 256 bayttan fazla yüklü olduğunu hatırlıyorum ...

Bir şeyin önceden reklamı:

Bir bayt her zaman 255'ten küçük veya ona eşit olacaktır. Ekleme 255 ile 0 arasındadır.


3
Bu beni anlaması gerekenden daha uzun sürdü
Hannesh

C # derleyicisi, pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf olduğunuz konusunda sizi uyarmıyor mu? (rot13 bilmeceyi bozmamak için)
Dennis Kaarsemaker

@ Muhtemelen hayır, çünkü lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag va dhrfgvba vf n inyvq vag.
wchargin

2
@DennisKaarsemaker Eğer lbh hfr 'yrff-guna gjb svsgl fvk' ise sizi uyarır, bu yüzden bunu yapmadım. Burada hiçbir uyarı yok.
Kendall Frey

2
İşte bir kod çözme / kodlayıcı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

C

#include <stdio.h>

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

(Derleyici uyarıları bunu verir.)


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

Bir yorumla işaretlediğim satırdaki noktalı virgül eksikliğinin yanlış ayrışmasına ve çökmesine neden olması haricinde hızlı çalışma.

Bu satırın sonuna noktalı virgül eklemek düzeltir.


0

C ++

İsimleri girer ve bir vektörde saklar. Bayrak değerinin girilmesiyle isimleri yazdırır. Kullanıcının daha fazla isim düşünüp düşünmediğini sorar; öyleyse, isimleri girer.

#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 kullanıcıları için hata print()s fordeyimindedir. Olmalı for (int i = 0; i < names.size(); i++). Bu sadece 1 karakter olduğundan ve fordöngülerde > = operatörü gerektiğinden (derleyici mesajını alana kadar) yapmak ve gözden kaçırmak kolay bir hatadır .


Dunno, okumanın hemen başında fark etti. Belki daha print()sonra kodda bir yere koymak daha iyi olurdu , böylece okuyucu hataya gelmeden önce biraz yorulur :)
Ruslan

0

GTB

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

[_+Olması gerektiği için hesap makinesini kilitler ["_"+, ancak olmadığı için hesap makinesinin belleği tükenir ve RAM'i yanlış şekilde temizler.


3
["_"+bana biraz üzgün bir yüz gibi görünüyor
corsiKa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.