ข้อผิดพลาดที่ดูผิดพลาด แต่เป็นสาเหตุของความผิดพลาด [ปิด]


19

มีคำถามหลากหลายที่หมุนรอบแนวคิดนี้ แต่สิ่งเหล่านี้ดูเหมือนจะเกี่ยวข้องกับการทำให้เกิดความผิดพลาดทำให้มีคำตอบมากมายซึ่งได้รับการออกแบบมาอย่างชัดเจนเพื่อทำให้เกิดความผิดพลาด ดังนั้นความท้าทายที่ฉันกำหนดให้คุณคือการเขียนรหัสที่เป็นไปได้บางอย่าง (แม้ว่าสิ่งที่รหัสควรจะ "เจตนา" คือฉันปล่อยให้คุณ) ซึ่งเกิดปัญหาทั้งระบบปฏิบัติการเป้าหมายทั้งหมดหรือเพียงตัวเองในทางที่ไม่ชัดเจนทันที (ฉันตระหนักว่าสิ่งที่นับว่า "ชัดเจนทันที" เป็นเรื่องส่วนตัว แต่หวังว่าการท้าทายจะยังคงชัดเจน)

ผู้ชนะคือคำตอบที่ได้คะแนนโหวตมากที่สุดหลังจาก 5 วัน


ลบรหัสการท้าทายของแท็กออกเนื่องจากไม่มีเกณฑ์ที่กำหนดไว้
Howard

2
มีสิ่งเหล่านี้เกิดขึ้นมากเกินไปในรหัสจริงของฉัน แม้ว่าฉันจะจำไม่ได้ก็ตาม
Joe Z.

ที่เกี่ยวข้อง: การประกวด C ที่มีเล่ห์เหลี่ยมมีปัญหามากมายกับเป้าหมายที่คล้ายกันและวิธีแก้ปัญหาที่ค่อนข้างชาญฉลาดสำหรับพวกเขา
FireFly

1
ฉันลงคะแนนให้ปิดคำถามนี้เป็นหัวข้อนอกเพราะความท้าทายที่ไม่ได้อยู่ในหัวข้อบนเว็บไซต์นี้อีกต่อไป meta.codegolf.stackexchange.com/a/8326/20469
cat

คำตอบ:


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ทำให้เกิดความตื่นตระหนกของเคอร์เนลนี่ไม่ใช่รหัสที่คุณต้องการใช้เป็นรูท :)


1
init ไม่สนใจ SIGKILL เพื่อ kernal panic คุณต้องส่ง SIGSEGV สัญญาณ 11
MultiplyByZer0

1
อ้าหนู แก้ไขเพื่อการเปลี่ยนแปลง แต่มันทำให้ดูไม่ค่อยเด่นเท่าไรนัก SIGTERM จะทำงานด้วยหรือไม่
Dennis Kaarsemaker


3
ฉันจะซ่อนSIGSEGVโดยใช้รหัสตัวเลข ท้ายที่สุดมันอาจจะเป็นความผิดพลาดก็ได้
Konrad Borowski

ผมชอบความคิดที่แก้ไข :)
เดนนิส Kaarsemaker

27

ค#

ลองกำหนดค่าเริ่มต้นรายการ bytes ด้วยค่าทุก ๆ ค่าจาก 0 ถึง 255

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

ความจำเต็ม? ฉันจำได้ชัดว่ามีการติดตั้งมากกว่า 256 ไบต์ ...

สปอยเลอร์:

ไบต์จะเสมอจะน้อยกว่าหรือเท่ากับ 255 เพิ่มล้อมรอบ 255-0


3
สิ่งนี้ทำให้ฉันใช้เวลานานกว่าที่ควรจะคิดออกมา
Hannesh

คอมไพเลอร์ C # ไม่เตือนคุณหรือไม่ว่าคุณเป็น pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf? (rot13 จะไม่ทำให้เสียปริศนา)
เดนนิส Kaarsemaker

@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' ซึ่งเป็นเหตุผลที่ฉันไม่ได้ทำอย่างนั้น ไม่มีคำเตือนที่นี่แม้ว่า
Kendall Frey

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


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ลูป


Dunno เห็นมันตั้งแต่เริ่มอ่าน อาจจะดีกว่าที่จะใส่print()อยู่ที่ไหนสักแห่งในภายหลังในรหัสเพื่อที่ผู้อ่านจะได้รับเหนื่อยเล็กน้อยก่อนที่จะมาผิดพลาด :)
Ruslan

0

GTB

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

ขัดข้องเครื่องคิดเลขเพราะ[_+ควรเป็น["_"+แต่ไม่เป็นเช่นนั้นเครื่องคิดเลขไม่มีหน่วยความจำจนอาจล้าง RAM ในทางที่ผิด


3
["_"+ ดูเหมือนว่าใบหน้าฉันจะอารมณ์เสียนิดหน่อย
corsiKa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.