Twoim zadaniem jest wygenerowanie wyjątku pustego wskaźnika. Oznacza to, że Twój program musi zaakceptować wartość, która według niego nie jest zerowa, i zgłosić wyjątek / błąd lub awarię, ponieważ wartość jest pusta.
Co więcej, odczytanie kodu nie może być oczywiste, że wartość jest zerowa. Twoim celem jest wyjaśnienie czytelnikowi, że wartość nie jest równa zeru, nawet jeśli tak naprawdę jest.
- Zamiast wartości zerowej możesz użyć wartości zero, brak, nic lub cokolwiek równoważnego w twoim języku. Możesz także użyć niezdefiniowanej, niezainicjowanej itd.
- Problem z twoim kodem musi polegać na tym, że zmienna ma (zaskakująco) null, gdy program oczekuje zmiennej innej niż null.
- Twój program może odpowiedzieć na wartość zerową, zgłaszając wyjątek, zgłaszając błąd, zawieszając się lub wykonując inne czynności, gdy napotka nieoczekiwany wynik zerowy.
To konkurs popularności, więc bądź sprytny!
popularity-contest
underhanded
Ypnypn
źródło
źródło
Odpowiedzi:
Jawa
Obliczmy wartość bezwzględną liczby. Java ma Math.abs do tego celu, jednak liczba, której używamy, może czasami być zerowa. Potrzebujemy więc metody pomocniczej, aby poradzić sobie z tą sprawą:
Jeśli x ma wartość null, zwróć null, w przeciwnym razie użyj Math.abs ().
Kod jest bardzo prosty i przejrzysty i powinien działać dobrze ... prawda?
Nawiasem mówiąc, zamiast tego użyj tej linii:
działa poprawnie. Myślałem o zrobieniu tego spoilera, ale .. Myślę, że to równie zagadkowe :)
Ok wyjaśnienie:
źródło
do
Każdy programista C popełnił ten błąd przynajmniej raz.
Powód:
Naprawić:
http://ideone.com/MbQhMM
źródło
scanf
jest funkcją wariadyczną iint
podano argument niepoprawnego typu ( ), gdy się tego spodziewałint *
. Ponieważ C (wiem, kompilatory potrafią to wykryć w przypadkuscanf
) nie może sprawdzić typów w funkcji variadic, to na szczęście się kompiluje.0
jest rzeczywiście literałem zerowym, ale dotyczy to samego bezpośrednio używanego literału, bez przechowywania go w zmiennej.n
nigdy nie zawierał wskaźnika zerowego.PHP
Ten ugryzł mnie kilka razy.
Spodziewany wynik:
Aktualny rezultat:
alias NullPointerException
Powód:
źródło
CoffeeScript (w Node.js)
W CoffeeScript
?
jest operatorem egzystencjalnym. Jeśli zmienna istnieje, jest używana, w przeciwnym razie używana jest prawa strona. Wszyscy wiemy, że trudno pisać programy przenośne. W tym przypadku drukowanie w JavaScript jest niedokładne. Przeglądarka używaalert
(lubdocument.write
) zastosowania powłoki spidermonkeyprint
i zastosowania node.jsconsole.log
. To szalone, ale CoffeeScript pomaga rozwiązać ten problem.Uruchommy to pod Node.js. W końcu chcemy się upewnić, że nasz skrypt działa.
Uhm, dlaczego miałbyś na to narzekać, skoro
alert
również nie jest zdefiniowany?źródło
Rubin
Znajdź awk w ŚCIEŻCE klonu Uniksa.
Ups!
Z błędu wiemy, że to
p.find
wywołanienil.find
, tak teżp
musi byćnil
. Jak to się stało?W Ruby
def
ma własny zakres zmiennych lokalnych i nigdy nie pobiera zmiennych lokalnych z zakresu zewnętrznego. Zatem zadaniep = ENV['PATH'].split ':'
nie jest objęte zakresem.Nieokreślona zmienna zwykle powoduje
NameError
, alep
jest szczególnym przypadkiem. Ruby ma globalną metodę o nazwiep
.p.find { ... }
Staje się więc wywołaniem metodyp().find { ... }
. Gdyp
nie ma argumentów, zwracanil
. (Kod golfistów używap
jako skrótu donil
.) Następnienil.find { ... }
podbijaNoMethodError
.Naprawiam to, przepisując program w Pythonie.
To działa!
Prawdopodobnie chcę to wydrukować
awk is /usr/bin/awk
, ale to inny błąd.źródło
DO#
With()
to metoda rozszerzeniastring
obiektu, która jest w zasadzie tylko aliasemstring.Format()
.Wygląda dobrze, prawda? Źle.
Większość osób, które trochę wiedzą na temat wewnętrznej specyfiki języka, prawdopodobnie będą w stanie dość szybko wykryć problem, ale wciąż jest to coś, czego łatwo nie zauważyć na pierwszy rzut oka.
źródło
.GetType()
itypeof()
, a tym samym prowadzi do winy, gdy wynik nie jest taki sam. Myślę, że plakat chciał kodu odpornego na pociski, który nie jest.return string.Format(format, args);
. Gdyby potrzebne było odbicie (w innym przypadku użycia), można by użyćtypeof(string)
(wyłapuje błędy w obudowie w czasie kompilacji, bez magicznego ciągu), a nieGetType
metody statycznej . Przykład wydaje się więc „nierealny”.Unity3D
Potem zapomnisz przeciągnąć i upuścić tam zasób i BOOM, Unity eksploduje. Dzieje się cały czas.
źródło
Rubin
Tylko prosty kod do pobrania iloczynu macierzy.
źródło
for (int i = 0; i <= arr.length; i++)
w Javie.Android
Widzę, że zdarza się to zbyt często. Osoba przekazuje komunikat do następnej czynności (może kod statusu, dane mapy, cokolwiek) i kończy pobieranie wartości null z
Intent
.Na pierwszy rzut oka wydaje się to całkiem rozsądne. Właśnie:
W
MenuActivity.java
:W
NextActivity.java
:FWIW, Javadoc nie powiedzieć, że
Intent.getStringExtra(String)
może wrócićnull
, ale tylko wtedy, gdy znacznik nie został znaleziony. Oczywiście używam tego samego tagu, więc musi to być coś innego ...źródło
do
Wystarczy szybki odczyt z bufora, w którym programista był na tyle miły, że udokumentował potencjalne niebezpieczeństwo!
źródło
Nimrod
źródło
DO#
To jest klasyczne. Bardzo użyteczna metoda
FindStringRepresentationOf
stworzy nową instancję określonego parametru typu, a następnie znaleźć reprezentację ciąg tej instancji.Na pewno marnowanie czasu
null
po utworzeniu nowej instancji będzie marnotrawstwem , więc nie zrobiłem tego ...Po rozwiązaniu problemu, jak opisano w niewidzialnym tekście powyżej, spróbuj również
goodInstance.GetType()
(różnica polega na tymGetType()
, że w przeciwieństwie doToString()
nie-wirtualnego, więc nie mogli tegooverride
zrobić w typieNullable<>
).źródło
C ++:
Czego można oczekiwać od „Hello World!” do wydrukowania. Ale na ekranie zobaczysz tylko śmieci.
Tutaj a1 jest niszczony po zakończeniu zakresu init (). Więc a_ptr, jak wskazuje na a1, będzie produkować śmieci.
źródło
do
Wyjaśnienie
źródło