एक अनजानी-सी दिखने वाली लेकिन दुर्घटनाग्रस्त बग [बंद]


19

इस अवधारणा के इर्द-गिर्द कई तरह के सवाल घूम रहे हैं, लेकिन ये सभी सिर्फ एक दुर्घटना का कारण बनते दिख रहे हैं, जिसके परिणामस्वरूप कई उत्तर हैं जो स्पष्ट रूप से दुर्घटना का कारण बनते हैं। तो जो चुनौती मैंने तय की है वह कुछ प्रशंसनीय कोड लिखने के लिए है (हालांकि जो कोड माना जाता है "इरादा" मैं आपको छोड़ देता हूं), जो या तो पूरे लक्ष्य ओएस को क्रैश कर देता है, या सिर्फ खुद को, एक तरह से जो तुरंत स्पष्ट नहीं है। (मुझे एहसास है कि "तुरंत स्पष्ट" के रूप में जो मायने रखता है वह व्यक्तिपरक है, लेकिन उम्मीद है कि चुनौती अभी भी काफी स्पष्ट है)।

विजेता 5 दिनों के बाद सबसे अधिक वोटों के साथ जवाब है।


हटाए गए टैग कोड-चुनौती के बाद से कोई उद्देश्य मानदंड नहीं दिया गया है।
हावर्ड

2
मेरे वास्तविक कोड में इनमें से बहुत सारी घटनाएं हुई हैं । मैं उनमें से किसी को याद नहीं कर सकता, हालांकि।
जो जेड।

संबंधित: अंडरहेल्ड सी प्रतियोगिता में एक समान लक्ष्य के साथ समस्याओं का एक गुच्छा है, और उनके लिए कुछ काफी चतुर समाधान हैं।
FireFly

1
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि इस साइट पर अंडरहैंड चुनौतियां अब विषय पर नहीं हैं। meta.codegolf.stackexchange.com/a/8326/20469
बिल्ली

जवाबों:


30

सी, लिनक्स। यदि रूट के रूप में चलाएं तो क्रैश सिस्टम

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

परिवर्तित करने से !=करने के लिए =!एक मासूम तुलना एक काम में बदल गया है। और यह देखते हुए कि पीआईडी ​​1 है init, और मारने से initकर्नेल घबराहट होती है, यह वह कोड नहीं है जिसे आप रूट के रूप में चलाना चाहेंगे :)


1
init इग्नोर करता है SIGKILL, कर्नेल पैनिक के लिए आपको इसे SIGSEGV, सिग्नल 11 भेजना होगा
MultiplyByZer0

1
आह, चूहों। बदलने के लिए संपादित, लेकिन यह बहुत कम असंगत बनाता है। क्या SIGTERM भी काम करेगा?
डेनिस करसेमेकर


3
मैं SIGSEGVसंख्यात्मक कोड का उपयोग करके छिपाऊंगा। आखिरकार, यह एक गलती हो सकती है।
कोनराड बोरोस्की

मुझे वह विचार पसंद है, संपादित :) :)
डेनिस करसेमेकर

27

सी#

आइए 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 हैं? (रैडल को खराब नहीं करना चाहिए)
डेनिस करसेमेकर

@ डेनिस शायद नहीं, क्योंकि lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgno va dhrfgvba vf n inyvq vag।
व्रजगिन

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('')
मोशेके


3

जावास्क्रिप्ट

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

सी ++

इनपुट नाम और उन्हें एक वेक्टर में संग्रहीत करते हैं। ध्वज मूल्य के प्रवेश पर प्रिंट का नाम। यदि उपयोगकर्ता अधिक नामों के बारे में सोचता है; यदि हां, तो इनपुट नाम।

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

गैर-सी ++, जावा, सी उपयोगकर्ताओं के लिए, त्रुटि print()एस forस्टेटमेंट में है। यह होना चाहिए for (int i = 0; i < names.size(); i++)। यह बनाने और अनदेखी करने के लिए एक आसान त्रुटि है (जब तक आपको संकलक संदेश नहीं मिलता है) क्योंकि यह केवल 1 वर्ण है और क्योंकि forलूप में> = ऑपरेटर को कभी-कभी आवश्यक होता है।


डननो ने इसे पढ़ने की शुरुआत में देखा। शायद print()बाद में कहीं कोड में रखना बेहतर होगा , ताकि गलती होने से पहले पाठक थोड़ा थक जाए :)
रुस्लान

0

GTB

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

कैलकुलेटर को क्रैश करता है क्योंकि यह [_+होना चाहिए ["_"+, लेकिन चूंकि यह नहीं है, कैलकुलेटर मेमोरी से बाहर चला जाता है, संभवतः रैम को गलत तरीके से साफ़ करता है।


3
["_"+एक चेहरे की तरह लग रहा है कि मेरे साथ थोड़ा परेशान है
corsiKa
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.