Schreiben Sie Programme, die verrückte, obskure, lächerliche oder einfach nur verrückte Laufzeitfehler erzeugen. Verschleierung und Golf (Shortness) nicht erforderlich.
- Lösungen, die so aussehen, als ob sie gut funktionieren sollten, sind besser.
- lösungen, die so aussehen, als ob sie auf die eine und auf die andere weise brechen sollten, sind besser.
- Nicht deterministische Lösungen sind besser, solange sie manchmal reproduzierbar sind.
- Lösungen mit großer Entfernung zwischen Fehlerursache und Manifestation sind besser.
- Bonuspunkte für Fehler, die unmöglich sein sollten.
- Bonuspunkte für Fehler, die die Laufzeit zum Absturz bringen (z. B. Python-Segmentfehler) oder das Betriebssystem.
Die Einheit der Punktzahl sind Aufwertungen.
Anhang 1
Fehlverhalten des Compilers ist ebenfalls in Ordnung.
import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
Antworten:
Das obligatorische PHP (das seit 5.4 noch nicht behoben ist):
Ausgänge:
Was?
quelle
''
(leere Zeichenfolge) aus der Klasse''
(leere Zeichenfolge)Gcc-Kompilierungsfehler:
Fehler: long long long ist zu lang für GCC
quelle
long long long
, wennlong
undlong long
beide gültig sind.Windows-Eingabeaufforderung
Ausgabe:
quelle
^V
:( Harte Tage diesePHP
Sie können einer Funktion keinen String übergeben, Sie müssen stattdessen einen String übergeben!
Update: Dieser Code ist KEIN Fehler in PHP 7. Bewegen Sie den Mauszeiger über einen Spoiler, um zu überprüfen, warum (enthält Spoiler über die Funktionsweise des Codes).
quelle
string
(die gültig ist) zu bekommen. Tipping (das, was Sie tun) funktioniert nur für Klassen. Da die Klassestring
nicht existiert, wird ein Fehler ausgegeben.array(''=>array()'')
.Bash
Und Sie würden denken, dass Bash ein einfaches "Hallo, Welt!" Programm.
quelle
`echo hi`
in die Zeichenfolge in doppelten Anführungszeichen eingeschlossen werdenhi
.!
wird als Präfix für Ereignisbezeichner verwendet . Daher versucht bash auszuwerten!"
, kann das Ereignis, auf das verwiesen wird, jedoch nicht finden.Python 2.7
Generiert die eher wenig hilfreichen:
Wie kann ein einfacher Kommentar einen Fehler erzeugen?
quelle
#
String beginnen und dascoding:
nächste Wort als Codierungsbeschreibung enthaltenMathematica
Wenn Sie mit Mathematica eine grafische Ausgabe erstellen, werden manchmal Fehlermeldungen ausgelöst, die gemäß den im Programm selbst verwendeten Spezifikationen formatiert sind. Hier ist ein triviales Beispiel.
quelle
TI-89 Grafikrechner
Ich entdeckte dies, als ich etwas über implizite Differenzierung in der Hochschulrechnung lernte. Wenn Sie Folgendes eingeben:
Sie erhalten folgendes:
Mit dieser Einschränkung, die in winzigen Buchstaben am unteren Rand des Bildschirms gedruckt wird:
Dies geschieht, weil
xy
nicht alsx * y
, sondern als eigenes Symbol interpretiert wirdxy
.Seltsamerweise erhalten
d(xy=0,x)
Sie in diesem Fall0 = 0
dieselbe Warnung.quelle
Sie können das Gehirn des Haskell-Compilers explodieren lassen:
quelle
Rubin
Regeln Missbrauch.
Wenn unter OSX ausgeführt, erzeugt z
quelle
wrong number of arguments(1 for 0)
. Es drückt dies durch eine Sprache aus, die träge und stochastisch mit englischem Vokabular erzeugt wird, ohne auf sprachliche Plausibilität Rücksicht zu nehmen.DOS-Eingabeaufforderung
gibt Ihnen
Ich bin darauf gestoßen, als ich versuchte, meinen Computer für seine mangelnde Zusammenarbeit zu beleidigen. Hat mich eine Weile traurig gemacht, bis ich herausfand, dass das nur passiert, wenn es keine Liebe gibt. Wenn es existiert, wird er es gerne schaffen.
quelle
make
Dienstprogramm gewidmet, nicht DOS selbst.make: *** No rule to make target 'love'. Stop.
make: Fatal error: Don't know how to make target 'love'
aber das ist unter Unix. Unter DOS verstehe ichmake is not recognized as an internal or external command, operable program or batch file
.Bash (Quine Fehler)
Dieser Fehler ist ein Quine in Bash!
Natürlich müssen Sie die entsprechenden
locale
(englisch hier) haben.quelle
...
am Ende nicht gedruckt , also musste ich es auch in der ursprünglichen Eingabe weglassen.CSH
Ein wirklich klassischer
csh
Witz:quelle
Bash - genaue Neuerstellung einer seltenen historischen Fehlermeldung
Ausgabe:
Erfordert, dass die Linux-Kernel-Quelle an der üblichen Stelle entpackt wird.
Witzige Tatsache: Ich habe diese Nachricht einmal ernsthaft erhalten, als ich einen alten Farbbanddrucker betrieb.
quelle
C (++)
Wenn Fehler bei der Kompilierung auftreten, handelt es sich um einen Fehler (vorausgesetzt, es handelt sich um eine Datei mit dem Namen "crash.c").
Beim Kompilieren füllt es den Bildschirm damit (Strg-C bereithalten)
Ein weiteres Snippet, das sich perfekt kompilieren lässt (keine Warnungen unter
-Wall
und illustriert die schöne Typensicherheit von C </ s>Laufen gibt es:
quelle
Rubin
Ich finde es seltsam, dass dies in einer Hochsprache passieren kann.
produziert
quelle
Dies ist sehr alt, aber für diejenigen, die sich an BCPL erinnern,
würde mich beschweren
quelle
R
Dies ist technisch gesehen kein Fehler, sondern eine Warnung, aber es ist trotzdem lächerlich und tritt aus völlig esoterischen Gründen auf.
[[EDIT]] Es scheint, dass die Ursache einiger Teile der lustigen Warnungen eher in RStudio als in R per se liegt, also ist es weniger interessant, als ich zuerst gedacht habe. Das erste Beispiel, dh,
plot(1:2, NotAGraphicalParameter = "ignore.me")
ist in "nacktem" R immer noch reproduzierbar und für sich genommen schon witzig genug. [[/ EDIT]]Es ist, als würde sich R an unsere Beleidigungen erinnern. Aber nicht lange.
Ich kann nicht wirklich erklären, warum das passiert - aber es ist reproduzierbar. Tatsächlich tritt es jedes Mal auf, wenn Sie dem Diagramm 1 einen "nicht grafischen Parameter" zuweisen und dann ein Diagramm 2 auf absolut einwandfreie Weise erstellen. Es ist besonders lustig, dass wir 12 Warnungen "kein grafischer Parameter" für den zweiten Plot erhalten, sondern nur 6 für den ersten. Eine andere lustige Sache ist, dass, wenn Sie "keinen grafischen Parameter" mit dem Wert NULL angeben, keine Bedingung ausgelöst wird:
Und um noch lächerlicher zu werden, zeichnen wir ein paar Linien über den zuvor gezeichneten Plot:
Das solltenichtGewinnen Sie viel, es sei denn, es gibt keine Gerechtigkeit.quelle
plot(2:3)
gleich nach der Verwendung erhalten, nicht reproduzieren kannplot(1:2, NotAGraphicalParameter = "ignore.me")
. Haben Sie etwas in Ihrem neu definiert.Rprofile
?Windows-Befehlsskript
ACHTUNG, das ist eine Gabelbombe!
Dadurch werden Müllfragen zum Beenden ausgegeben, wenn Sie versuchen, die Konsole auf irgendeine Weise zu beenden.
Boni:
quelle
q beleidigt dich
quelle
Wie wäre es mit Compiler-Optimierungsfehlern:
Dies ist spezifisch für gcc> = 4.7. Kompiliert und läuft gut mit
gcc -O0 -Wall
. Kompiliert mitgcc -O2 -Wall
, führt aber zu einer Inf-Schleife.Beachte auch, wie gcc das Problem für kleinere sieht
N
, zBN = 3
:Übrigens wurde dies einem Fehlerbericht entnommen, aber ich kann mich nicht an die Fehlernummer erinnern.
quelle
arr[N]
(außerhalb des Arrays) und Zugriffarr[0]
(der nicht initialisiert ist). Da für undefiniertes Verhalten alles zulässig ist, handelt es sich nicht um einen Optimierungsfehler, sondern höchstwahrscheinlich um den vom Benutzer gewünschten Fehler.Ich habe diese Verrücktheit in APL immer gemocht:
Es analysiert das Innere von Funktionen träge!
quelle
PHP
[]
wird verwendet, um Elemente zu schieben. Wenn Sie es jedoch für Array-Literal verwenden, macht das PHP eine verrückte Fehlermeldung, auch wenn Sie es zuweisen, um zu pushen. Benötigt PHP> = 5.4, da zuvor Array-Literale nicht indiziert werden konnten.Ausgabe:
quelle
Python
Verschachtelte Blöcke
Python 2.7:
SystemError: too many statically nested blocks
Selbstreferenzierende Listen
Python 2.7
Wahr ist keine Konstante
Das Problem in dem folgende Beispiel ist , dass in Python 2.7,
True
undFalse
sind keine Konstanten. UndTrue
undFalse
können automatisch umgewandelt werden in1
und0
:Python 2.7:
Absicht
Bekommst du den fehler
Das Mischen von Tabulatoren und Leerzeichen war in Python 2.7 in Ordnung. Beachten Sie jedoch die Einrückungsstufe!
quelle
print a
.Ich fange an:
Irgendwelche Vermutungen, warum dieses Programm abstürzt? : D
Siehe
jane
run: http://ideone.com/gtaZ3quelle
B::BreakHorribly
ruft sich vorher andoSomethingDiabolical
, wird alsodelete this
nie erreicht.delete this
hast, oder?Bash
Das habe ich heute erfahren, als ich herausgefunden habe, ob es möglich ist, das System vor zu schützen
rm -rf /
.Die Fehlermeldung mit
LANG=C
:quelle
rm
nicht vonbash
. Sie sind sich nicht sicher, welche Sprache Sie im Titel deklarieren sollen, da Sie siebash
eingerichtet haben.R
Eine andere, die nicht lächerlich ist und wiederum eher eine Warnung als ein Fehler ist, aber trotzdem nett:
Ich mag das letzte bisschen: 50 oder mehr :)
Und die tatsächlichen Warnungen:
FUN = FUN!
quelle
CPython
Das Ergebnis:
quelle
ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None))
.Bash - nicht intuitive Fluchtversagen
kehrt zurück
(Die Erweiterung des Verlaufs in der Befehlszeile wird nicht durch doppelte Anführungszeichen verhindert.)
Bonus:
Es ist unwahrscheinlich, dass die Ausgabe den Erwartungen entspricht. Drücken Sie nach oben , um den Befehl erneut abzurufen, und stellen Sie fest, dass er sich von Ihrer Eingabe unterscheidet. Wenn Sie mehrmals drücken und eingeben, sieht Ihre Ausgabe wahrscheinlich etwas schrecklich aus. Probieren Sie es aus.
quelle
Rekursiver, fauler Fibonacci-Generator
Dieser Code sieht gut aus, oder? Ein ziemlich einfacher Fibonacci-Generator, der mit einigen Rekursionen und faulen Aufzählungen aufwartet. Sollte arbeiten.
Nee! Wenn Sie dies ausführen, wird eine OverflowException ausgelöst. Dies liegt daran, dass wir eine Dezimalzahl verwenden und die 141. Fibonacci-Zahl (~ 8.1E28) den Maximalwert der Dezimalzahl (~ 7.9E28) überschreitet.
Das int löst jedoch keine OverflowException aus, wenn Sie den Maximalwert überschreiten. Stattdessen läuft es wie erwartet auf einen negativen Wert über. Wenn wir also stattdessen int durch decimal ersetzen, wie im folgenden Code, sollte es funktionieren, oder?
Wenn Sie den Code lesen, sollte klar sein, warum dies nicht funktioniert. Wenn nicht ... Ich habe den Typ nicht einfach von dezimal auf int geändert. Ich habe mich auch an ToList () in der foreach-Anweisung gewöhnt. Dadurch wird der zurückgegebene Enumerator gezwungen, eifrig ausgewertet zu werden. Dies führt nicht zu 141 Rekursionen, sondern zu unendlich vielen Rekursionen. Eigentlich wird der Stack lange bevor er auf unendlich geht überlaufen, was zur Folge hat, dass die Laufzeit eine StackOverflowException auslöst. (Bonus: Diese Ausnahme kann nicht abgefangen werden, daher stürzt die Laufzeit ab.)
quelle