意図せずに見えるがクラッシュを引き起こすバグ[終了]


19

この概念を中心にさまざまな質問がありますが、これらはすべてクラッシュを引き起こすことを含むように見えるため、クラッシュを引き起こすように非常に明らかに設計された多くの回答が得られます。したがって、私が設定した課題は、もっともらしいコードを書くことです(ただし、「意図」と思われるコードはあなたにお任せしますが)、ターゲットOS全体またはそれ自体をクラッシュさせます。(「即座に明らか」と見なされるものは主観的であると理解していますが、うまくいけば、課題はまだ合理的に明確であることを願っています)。

勝者は、5日後の投票数が最も多い答えです。


客観的な基準が指定されていないため、タグのコードチャレンジを削除しました。
ハワード14年

2
私の実際のコードでは、これらの発生が多すぎます。しかし、私はそれらのいずれも覚えていません。
ジョーZ。14年

関連:Underhanded C Contestには、同様の目標を持つ多くの問題と、それらに対するいくつかの非常に賢い解決策があります。
ホタル14年

1
このサイトでは、手に負えない課題がトピックではなくなったため、この質問をトピック外として終了することに投票しています。meta.codegolf.stackexchange.com/a/8326/20469
cat

回答:


30

C、Linux。ルートとして実行するとシステムがクラッシュする

/* 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とカーネルパニックが発生することを考えると、これはrootとして実行したいコードではありません:)


1
initはSIGKILLを無視します。カーネルパニックにするには、SIGSEGV、シグナル11
MultiplyByZer0を

1
ああ、ラット。変更のために編集されましたが、それにより目立たなくなりました。SIGTERMも機能しますか?
デニスカースメーカー


3
SIGSEGV数値コードを使用して非表示にします。結局のところ、それは間違いだったかもしれません。
コンラッドボロスキー14年

私はそのアイデアが好きです、編集:)
デニスカースメーカー14年

27

C#

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'dなぞなぞを台無しに)
デニスKaarsemaker 14年

@デニスはおそらくそうではありません、なぜならlbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat、naq gur pbafgnag va dhrfgvba vf n inyvq vag。
wchargin 14年

2
@DennisKaarsemaker lbh hfr 'yrff-guna gjb svsgl fvk'の場合は警告します。ただし、ここには警告はありません。
ケンドールフレイ14年

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ループでは> =演算子が必要になることがあるためです。


ダンノ、読書の始めにそれを見つけた。おそらくprint()、コードのどこかに後から挿入して、読者が間違いを犯す前に少し疲れるようにした方がよいでしょう。)
Ruslan 14年

0

GTB

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

である[_+必要があるため、電卓をクラッシュします["_"+が、そうではないため、電卓はメモリを使い果たし、潜在的にRAMを間違った方法でクリアします。


3
["_"+私と一緒に少し動揺の顔のように見える
corsiKa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.