Ein ungewollt aussehender, aber absturzverursachender Fehler [geschlossen]


19

Es gibt eine Reihe von Fragen, die sich um dieses Konzept drehen, aber alle scheinen nur einen Absturz zu verursachen, was zu vielen Antworten führt, die ganz offensichtlich darauf ausgelegt sind, einen Absturz zu verursachen. Die Herausforderung, die ich Ihnen gestellt habe, besteht darin, einen plausiblen Code zu schreiben (obwohl ich die "Absicht" des Codes Ihnen überlasse), der entweder das gesamte Ziel-Betriebssystem oder nur sich selbst in einer Weise zum Absturz bringt, die nicht sofort offensichtlich ist. (Mir ist klar, dass das, was als "sofort offensichtlich" gilt, subjektiv ist, aber die Herausforderung ist hoffentlich noch einigermaßen klar).

Der Gewinner ist die Antwort mit den meisten Stimmen nach 5 Tagen.


Tag-Code-Abfrage entfernt, da kein objektives Kriterium angegeben ist.
Howard

2
In meinem eigentlichen Code sind zu viele Vorkommen davon vorgekommen. Ich kann mich jedoch an keine erinnern.
Joe Z.

Verwandte: Der Underhanded C-Wettbewerb hat eine Reihe von Problemen mit einem ähnlichen Ziel und einige recht clevere Lösungen für sie.
FireFly

1
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da hinterhältige Herausforderungen auf dieser Site nicht mehr zum Thema gehören. meta.codegolf.stackexchange.com/a/8326/20469
cat

Antworten:


30

C, Linux. System stürzt ab, wenn es als root ausgeführt wird

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

Durch den Wechsel !=zu =!wird aus einem unschuldigen Vergleich eine Aufgabe. Und da PID 1 ist initund das Töten initeine Kernel-Panik verursacht, ist dies kein Code, den Sie als root ausführen möchten :)


1
init ignoriert SIGKILL, um in Panik zu geraten, muss SIGSEGV gesendet werden, Signal 11
MultiplyByZer0

1
Ah, Ratten. Bearbeitet, um zu ändern, aber das macht es viel weniger unauffällig. Würde SIGTERM auch funktionieren?
Dennis Kaarsemaker


3
Ich würde mich SIGSEGVmit numerischem Code verstecken . Immerhin könnte es ein Fehler gewesen sein.
Konrad Borowski

Ich mag diese Idee, bearbeitet :)
Dennis Kaarsemaker

27

C #

Initialisieren wir einfach eine Liste von Bytes mit jedem Bytewert von 0 bis 255.

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

Zu wenig Speicher? Ich erinnere mich deutlich, mehr als 256 Bytes installiert zu haben ...

Spoiler:

Ein Byte wird immer kleiner oder gleich 255 sein. Die Addition bricht von 255 auf 0 um.


3
Ich habe länger
gebraucht,

Warnt Sie der C # -Compiler nicht, dass Sie pbzcnevat jvgu n pbafgnag gung'f bhg bs obhaqf sind? (Rot13 würde das Rätsel nicht verderben)
Dennis Kaarsemaker

@ Tennis wahrscheinlich nicht, weil lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat, naq gur pbafgnag va dhrfgvba vf n inyvq vag.
Wchargin

2
@DennisKaarsemaker Es warnt dich, wenn es 'yrff-guna gjb svsgl fvk' gibt, weshalb ich das nicht getan habe. Es gibt hier jedoch keine Warnungen.
Kendall Frey

2
Hier ist eine Dekodierung / 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('')
Kodierung

7

C

#include <stdio.h>

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

(Compiler-Warnungen werden es verraten.)


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

QuickSort funktioniert, mit Ausnahme der Tatsache, dass ein fehlendes Semikolon in der mit einem Kommentar markierten Zeile dazu führt, dass die Syntaxanalyse falsch ist und ein Absturz auftritt.

Das Hinzufügen eines Semikolons am Ende dieser Zeile behebt das Problem.


0

C ++

Namen eingeben und in einem Vektor speichern. Druckt Namen nach Eingabe des Flag-Werts. Fragt, ob der Benutzer an mehr Namen gedacht hat; Wenn ja, Namen eingeben.

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

Bei Nicht-C ++ -, Java- und C-Benutzern steht der Fehler in der Anweisung print()s for. Es sollte so sein for (int i = 0; i < names.size(); i++). Dies ist ein einfacher Fehler, den Sie machen und übersehen müssen (bis Sie die Compilermeldung erhalten), da es sich nur um 1 Zeichen handelt und der Operator> = manchmal in forSchleifen erforderlich ist .


Keine Ahnung, habe es gleich zu Beginn des Lesens entdeckt. Vielleicht wäre es besser, print()etwas später in den Code
Ruslan

0

AGB

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

Der Rechner stürzt ab, weil es [_+sein sollte ["_"+, aber da dies nicht der Fall ist, verfügt der Rechner nicht über genügend Arbeitsspeicher, wodurch möglicherweise der Arbeitsspeicher falsch gelöscht wird.


3
["_"+sieht aus wie ein Gesicht, das ein wenig verärgert über mich ist
corsiKa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.