Pisz programy, które powodują szalone, niejasne, śmieszne lub po prostu szalone błędy w czasie wykonywania. Niewidoczne zaciemnienie i długość golfa (krótkość) nie są wymagane.
- rozwiązania, które wyglądają, jakby powinny dobrze działać, są lepsze.
- rozwiązania, które wyglądają, jakby powinny się zepsuć w jedną stronę, ale w drugą, są lepsze.
- rozwiązania, które nie są deterministyczne, są lepsze, o ile są czasami powtarzalne.
- rozwiązania z dużą odległością między przyczyną błędu a manifestacją są lepsze.
- punkty bonusowe za błędy, które powinny być niemożliwe.
- punkty bonusowe za błędy powodujące awarię środowiska wykonawczego (np. powodujące błąd segmentu python) lub system operacyjny.
Jednostką oceny są głosy pozytywne.
Dodatek 1
Niewłaściwe zachowanie kompilatora też jest w porządku.
import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
Odpowiedzi:
Obowiązkowy PHP (który wciąż nie został naprawiony od 5.4):
Wyjścia:
Co?
źródło
''
(pusty ciąg) z klasy''
(pusty ciąg)Błąd kompilacji Gcc:
błąd: długi długi długi jest zbyt długi dla GCC
źródło
long long long
, jeślilong
ilong long
oba są ważne.Wiersz polecenia systemu Windows
Wynik:
źródło
^V
:( ciężkie dniPHP
Nie możesz przekazać ciągu do funkcji, zamiast tego musisz przekazać ciąg!
Aktualizacja: Ten kod NIE jest błędem w PHP 7. Najedź kursorem na / kliknij / dotknij spoilera, aby sprawdzić, dlaczego (zawiera spoilery na temat działania kodu).
źródło
string
(która jest poprawna). Podpisywanie tekstu (to, co robisz) działa tylko dla klas. Ponieważ klasastring
nie istnieje, zgłasza błąd.array(''=>array()'')
.grzmotnąć
I pomyślałbyś, że bash zaakceptowałby proste „Witaj, świecie!” program.
źródło
`echo hi`
zamieniają sięhi
w ciąg podwójnego cudzysłowu.!
jest używany jako przedrostek oznaczników zdarzeń . Więc bash próbuje ocenić!"
, ale nie może znaleźć zdarzenia, do którego się odwołuje.Python 2.7
Generuje raczej nieprzydatne:
Jak prosty komentarz może generować błąd?
źródło
#
i zawierają ciąg znaków,coding:
następne słowo użyte jako opis kodowaniaMatematyka
Podczas korzystania z Mathematica do tworzenia graficznych danych wyjściowych czasami wyzwalane są komunikaty o błędach sformatowane zgodnie ze specyfikacjami zastosowanymi w samym programie. Oto trywialny przykład.
źródło
Kalkulator graficzny TI-89
Odkryłem to, kiedy dowiedziałem się o ukrytym różnicowaniu w rachunku różniczkowym w szkole średniej. Jeśli wpiszesz:
Otrzymasz następujące:
Z tym zastrzeżeniem wydrukowanym małymi literami u dołu ekranu:
Dzieje się tak, ponieważ
xy
nie jest interpretowany jakox * y
, ale raczej jako własny symbolxy
.Co dziwne, jeśli to zrobisz
d(xy=0,x)
, dostaniesz0 = 0
to samo ostrzeżenie.źródło
Możesz sprawić, że mózg kompilatora Haskell wybuchnie:
źródło
Rubin
Nadużycie zasad.
Jeśli działa na OSX, produkuje np
źródło
wrong number of arguments(1 for 0)
. Wyraża to poprzez język, który jest generowany leniwie i stochastycznie przy użyciu słownictwa angielskiego z niewielkim uwzględnieniem prawdopodobieństwa językowego.Monit DOS
daje Ci
Natknąłem się na to, gdy próbowałem obrazić komputer za brak współpracy. Przez pewien czas trochę mnie zasmuciłem, dopóki nie dowiedziałem się, że dzieje się tak tylko wtedy, gdy miłość nie istnieje. Jeśli istnieje, chętnie to zrobi.
źródło
make
użyteczności, a nie samemu DOS.make: *** No rule to make target 'love'. Stop.
make: Fatal error: Don't know how to make target 'love'
ale to jest na Uniksie. W systemie DOS rozumiemmake is not recognized as an internal or external command, operable program or batch file
.Bash (błąd Quine)
Ten błąd to Quine w Bash!
Oczywiście musisz mieć odpowiedni
locale
(tutaj angielski).źródło
...
na końcu, więc musiałem pominąć to również w oryginalnym wejściu.CSH
Naprawdę klasyczny
csh
żart:źródło
Bash - dokładne odtworzenie rzadkiego historycznego komunikatu o błędzie
Wynik:
Wymaga rozpakowania źródła jądra Linux w zwykłym miejscu.
Ciekawostka: raz otrzymałem ten komunikat na poważnie, kiedy uruchomiłem starą drukarkę wstążkową.
źródło
C (++)
Jeśli liczą się błędy czasu kompilacji, oto jeden (zakładając, że plik ma nazwę „crash.c”).
Wypełnia to ekran po kompilacji (przygotuj Ctrl-C)
Kolejny fragment kodu, który doskonale się kompiluje (brak ostrzeżeń pod
-Wall
i ilustruje bezpieczeństwo typu C w pięknym stylu </s>Uruchomienie go daje:
źródło
Rubin
To dziwne, że może się to zdarzyć w języku wysokiego poziomu.
produkuje
źródło
To jest bardzo stare, ale dla tych, którzy pamiętają BCPL,
narzekałby
źródło
R
Z technicznego punktu widzenia nie jest to błąd, ale ostrzeżenie, ale mimo to jest niedorzeczne i występuje z całkowicie ezoterycznych powodów.
[[EDYCJA]] Wydaje się, że przyczyną niektórych fragmentów śmiesznych ostrzeżeń jest RStudio, a nie R per se, więc jest to mniej interesujące, niż początkowo myślałem. Pierwszy przykład, to
plot(1:2, NotAGraphicalParameter = "ignore.me")
jest jednak nadal powtarzalny w „nagim” R i sam w sobie jest dość zabawny. [[/ EDIT]]To tak, jakby R pamięta nasze obelgi. Ale nie na długo.
Naprawdę nie potrafię wyjaśnić, dlaczego tak się dzieje - ale jest to powtarzalne. W rzeczywistości występuje to za każdym razem, gdy podasz jakiś „nie graficzny parametr” do wydruku 1, a następnie wydrukujesz wykres 2 w całkowicie nienaganny sposób. Szczególnie zabawne jest to, że otrzymujemy 12 ostrzeżeń „nie graficznych” dla drugiego wątku, ale tylko 6 dla pierwszego. Kolejną zabawną rzeczą jest to, że jeśli podasz „nie parametr graficzny” o wartości NULL, wówczas nie zostanie zgłoszony żaden warunek:
Aby stać się jeszcze bardziej absurdalnym, narysujmy kilka linii na uprzednio narysowanej fabule:
To powinnoniewygraj dużo czasu, chyba że nie ma sprawiedliwości.źródło
plot(2:3)
zaraz po użyciuplot(1:2, NotAGraphicalParameter = "ignore.me")
. Czy zdefiniowałeś coś na nowo.Rprofile
?Skrypt poleceń systemu Windows
OSTRZEŻENIE, to bomba widełkowa!
Spowoduje to wyświetlenie niepotrzebnych pytań dotyczących rezygnacji, jeśli spróbujesz w jakikolwiek sposób zamknąć konsolę.
Bonusy:
źródło
q obraża cię
źródło
Co z błędami optymalizacji kompilatora:
Jest to specyficzne dla gcc> = 4.7. Kompiluje się i działa poprawnie z
gcc -O0 -Wall
. Kompiluje się z,gcc -O2 -Wall
ale skutkuje powstaniem pętli inf.Zauważ też, jak gcc widzi problem dla mniejszych
N
, np .N = 3
:Przy okazji, wzięto to z raportu o błędzie, nie pamiętam jednak numeru błędu.
źródło
arr[N]
(poza tablicą) i dostęparr[0]
(który jest niezainicjowany)). Ponieważ w przypadku nieokreślonego zachowania dozwolone jest wszystko, nie jest to błąd optymalizacji, ale jest bardzo mało prawdopodobne, aby był tym, czego chciał użytkownik.Zawsze lubiłem tę dziwność w APL:
Leniwie analizuje wnętrze funkcji!
źródło
PHP
[]
służy do pchania elementów. Jeśli jednak użyjesz go do literału tablicowego, PHP generuje zwariowany komunikat o błędzie, nawet jeśli przypisujesz mu to w celu wypychania. Wymaga PHP> = 5,4, ponieważ wcześniej nie można było indeksować literałów tablicowych.Wynik:
źródło
Pyton
Bloki zagnieżdżone
Python 2.7:
SystemError: too many statically nested blocks
Listy z odnośnikami
Python 2.7
Prawda nie jest stała
Problem w poniższym przykładzie jest taki, że w Pythonie 2.7
True
iFalse
nie są stałymi. ATrue
iFalse
może się automatycznie do lanego1
i0
:Python 2.7:
Przeznaczenie
Czy pojawia się błąd?
Mieszanie tabulatorów i spacji było prawidłowe w Pythonie 2.7 ... ale pamiętaj o poziomie wcięcia!
źródło
print a
.Zacznę:
Zgadłeś, dlaczego ten program ulega awarii? :RE
Zobacz
jane
run: http://ideone.com/gtaZ3źródło
B::BreakHorribly
wywołuje się wcześniejdoSomethingDiabolical
, więcdelete this
nie jest osiągane.delete this
, prawda?Grzmotnąć
Dostałem to dzisiaj, kiedy próbowałem dowiedzieć się, czy można chronić system przed
rm -rf /
.Komunikat o błędzie z
LANG=C
:źródło
rm
, niebash
. Nie jestem pewien, jaki język powinieneś zadeklarować w tytule, biorąc pod uwagę, że użyłeś gobash
do skonfigurowania.R
Kolejne, które nie jest śmieszne i, znowu, jest ostrzeżeniem niż błędem, ale nadal jest przyjemne:
Podoba mi się ostatni bit: 50 lub więcej :)
A aktualne ostrzeżenia:
ZABAWA = ZABAWA!
źródło
CPython
Wynik:
źródło
ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None))
.Bash - nieudana próba ucieczki
zwroty
(podwójne cudzysłowy nie zapobiegają rozszerzaniu historii w wierszu poleceń)
Premia:
Wynik raczej nie będzie zgodny z oczekiwaniami. Naciśnij w górę, aby ponownie uzyskać polecenie, i zauważ, że zostało zmienione w stosunku do wpisanego tekstu. Jeśli naciśniesz w górę i wejdziesz kilka razy, prawdopodobnie Twoje wyniki zaczną wyglądać nieco przerażająco. Wypróbuj sam.
źródło
C # - Rekurencyjny, leniwy generator Fibonacciego
Ten kod wygląda dobrze, prawda? Dość prosty generator Fibonacciego, doprawiony odrobiną rekurencji i leniwym wyliczaniem. Powinno działać.
Nie! Uruchomienie tego spowoduje OverflowException. Jest tak, ponieważ używamy dziesiętnych, a 141. liczba Fibonacciego (~ 8,1E28) przekracza maksymalną wartość dziesiętną (~ 7,9E28).
Jednak int nie zgłasza wyjątku OverflowException po przekroczeniu jego maksymalnej wartości. Zamiast tego, zgodnie z oczekiwaniami, przepełnia się do wartości ujemnej. Więc jeśli zastąpimy int zamiast dziesiętnym, jak w poniższym kodzie, to powinno działać, prawda?
Jeśli czytasz kod, powinno być oczywiste, dlaczego to nie zadziała. Jeśli nie ... Nie zmieniłem tylko typu z dziesiętnego na int; Włączyłem także wywołanie funkcji ToList () w instrukcji foreach. Zmusi to moduł oceniający do niecierpliwości do oceny. Spowoduje to nie 141 rekurencji, ale nieskończoną liczbę rekurencji. W rzeczywistości na długo zanim osiągnie nieskończoność, oczywiście przepełni stos, powodując, że środowisko wykonawcze wyrzuci wyjątek StackOverflowException. (premia: tego wyjątku nie można złapać, więc spowoduje to awarię środowiska wykonawczego)
źródło