의도하지 않은 것처럼 보이지만 충돌을 일으키는 버그 [닫힘]


19

이 개념과 관련하여 다양한 질문이 있지만 이것들은 모두 충돌을 일으키는 것으로 보이며 많은 응답이 충돌을 유발하도록 설계되었습니다. 따라서 내가 설정 한 과제는 전체 대상 OS 또는 그 자체가 즉시 명백하지 않은 방식으로 충돌하는 그럴듯한 코드를 작성하는 것입니다. ( '즉각적으로 명백한'것으로 간주되는 것은 주관적이지만 도전은 여전히 ​​합리적이라는 것을 알고 있습니다.)

우승자는 5 일 후에 가장 많은 표를 얻은 답변입니다.


객관적인 기준이 없으므로 태그 코드 문제가 제거되었습니다.
Howard

2
실제 코드 에서 이러한 항목이 너무 많이 발생했습니다 . 그래도 기억이 나지 않습니다.
Joe Z.

Underhanded C Contest 는 비슷한 목표와 관련 하여 많은 문제가 있으며, 이에 대한 영리한 해결책이 있습니다.
FireFly

1
나는이 문제를 주제로 다루지 않기로 결심했다. 왜냐하면이 사이트에서 미숙 한 도전은 더 이상 주제가 아니기 때문이다. meta.codegolf.stackexchange.com/a/8326/20469
cat

답변:


30

C, 리눅스 루트로 실행하면 시스템 충돌

/* 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 is init이고 killing init이 커널 패닉을 유발 한다는 것을 감안할 때 이것은 루트로 실행하려는 코드가 아닙니다 :)


1
init는 SIGKILL을 무시하고, 커널 패닉 상태로 SIGSEGV를 보내야합니다. 신호 11
MultiplyByZer0

1
아, 쥐 변경하도록 수정되었지만 눈에 잘 띄지 않습니다. SIGTERM도 작동합니까?
Dennis Kaarsemaker


3
SIGSEGV숫자 코드를 사용하여 숨길 것 입니다. 결국, 그것은 실수 일 수 있습니다.
Konrad Borowski 2019 년

나는 그 아이디어를 좋아한다. :)
Dennis Kaarsemaker

27

씨#

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은 수수께끼를 망치지 않기 위해)
Dennis Kaarsemaker

lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag va dhrfgvba vf n inyvq vag 때문에 @Dennis는 아마 아닙니다.
wchargin

2
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

7

#include <stdio.h>

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

(컴파일러 경고가 표시됩니다.)


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

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++). 이것은 컴파일러 문자를받을 때까지 한 문자 만 있고 for루프에 > = 연산자가 필요할 때가 있기 때문에 간과하기 쉬운 오류 입니다.


던 노는 책을 읽을 때 바로 그것을 발견했다. 어쩌면 print()나중에 코드의 어딘가에 두는 것이 더 좋을 것이므로 독자는 실수하기 전에 약간 피곤해 질 것입니다 :)
Ruslan

0

GTB

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

[_+이어야 하기 때문에 계산기가 충돌 ["_"+하지만 그렇지 않기 때문에 계산기에 메모리가 부족하여 RAM을 잘못 정리할 수 있습니다.


3
["_"+나랑 조금 화난 얼굴처럼 보여
corsiKa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.