Su tarea es generar una excepción de puntero nulo. Es decir, su programa debe aceptar un valor que espera que no sea nulo, y lanzar una excepción / error o bloqueo porque el valor es nulo.
Además, no puede ser obvio al leer el código que el valor es nulo. Su objetivo es hacer que el lector tenga claro que el valor no es nulo, aunque en realidad lo sea.
- En lugar de nulo, puede usar nil, none, nothing o lo que sea equivalente en su idioma. También puede usar indefinido, sin inicializar, etc.
- El problema con su código debe ser que la variable es (sorprendentemente) nula donde el programa espera una variable no nula.
- Su programa puede responder al nulo lanzando una excepción, lanzando un error, fallando o lo que sea que haga normalmente cuando se encuentra un nulo inesperado.
Este es un concurso de popularidad, ¡así que sé inteligente!
popularity-contest
underhanded
Ypnypn
fuente
fuente
Respuestas:
Java
Calculemos el valor absoluto de un número. Java tiene Math.abs para este propósito, sin embargo, el número que estamos usando puede ser nulo a veces. Por lo tanto, necesitamos un método auxiliar para lidiar con ese caso:
Si x es nulo, devuelve nulo, de lo contrario use Math.abs ().
El código es muy simple y claro, y debería funcionar bien ... ¿verdad?
Por cierto, usando esta línea en su lugar:
funciona correctamente Pensé en hacer de esto un spoiler, pero ... creo que es igual de desconcertante :)
Ok, una explicación:
fuente
C
Todos los programadores de C cometieron este error, al menos una vez.
Razón:
Reparar:
http://ideone.com/MbQhMM
fuente
scanf
es una función variada, y se dio un argumento de tipo incorrecto (int
), cuando se esperabaint *
. Debido a que C (lo sé, los compiladores pueden detectar esto en el caso descanf
) no puede verificar los tipos en función variadic, esto compila felizmente.0
es, de hecho, literal de puntero nulo, pero esto solo se aplica al literal utilizado directamente, sin almacenarlo en una variable.n
nunca contuvo un puntero nulo.PHP
Este me ha mordido algunas veces.
Resultado Esperado:
Resultado actual:
aka NullPointerException
Razón:
fuente
CoffeeScript (en Node.js)
En CoffeeScript,
?
es operador existencial. Si la variable existe, se usa, de lo contrario se usa el lado derecho. Todos sabemos que es difícil escribir programas portátiles. Caso en cuestión, la impresión en JavaScript está debajo de lo especificado. Los navegadores utilizanalert
(odocument.write
), SpiderMonkey usos de la cáscaraprint
, y los usos Node.jsconsole.log
. Esto es una locura, pero CoffeeScript ayuda con este problema.Ejecutemos esto en Node.js. Después de todo, queremos asegurarnos de que nuestro script funcione.
Uhm, ¿por qué te quejarías de eso, cuando
alert
tampoco está definido?fuente
Rubí
Encuentra awk en la RUTA de un clon de Unix.
¡Uy!
Por el error, sabemos que
p.find
llamónil.find
, asíp
debe sernil
. ¿Cómo pasó esto?En Ruby,
def
tiene su propio alcance para variables locales, y nunca toma variables locales del alcance externo. Por lo tanto, la asignaciónp = ENV['PATH'].split ':'
no está dentro del alcance.Una variable indefinida generalmente causa
NameError
, perop
es un caso especial. Ruby tiene un método global llamadop
. Entonces sep.find { ... }
convierte en una llamada al método, comop().find { ... }
. Cuandop
no tiene argumentos, vuelvenil
. (Los golfistas de código usanp
como atajo paranil
). Luegonil.find { ... }
aumentaNoMethodError
.Lo arreglo reescribiendo el programa en Python.
¡Funciona!
Probablemente quiera que se imprima
awk is /usr/bin/awk
, pero ese es un error diferente.fuente
C#
With()
es un método de extensión para elstring
objeto, que es esencialmente solo un alias parastring.Format()
.Se ve bien, ¿verdad? Incorrecto.
La mayoría de las personas que conocen un poco los detalles internos del lenguaje probablemente podrán detectar el problema con bastante rapidez, pero aún así es algo que fácilmente se pasa por alto de un vistazo.
fuente
.GetType()
ytypeof()
y lo que conduce a un fallo cuando el resultado no es el mismo. Creo que el cartel quería un código a prueba de balas que no lo es.return string.Format(format, args);
. Si se necesitara reflexión (en otro caso de uso), se usaríatypeof(string)
(atrapa errores de carcasa en tiempo de compilación, sin cadena mágica), no elGetType
método estático . Entonces el ejemplo parece "poco realista".Unity3D
Luego se olvida de arrastrar y soltar el activo allí y BOOM, Unity explota. Pasa todo el tiempo.
fuente
Rubí
Solo un código simple para tomar el producto de una matriz.
fuente
for (int i = 0; i <= arr.length; i++)
en Java.Androide
Veo que esto sucede con demasiada frecuencia. Una persona pasa un mensaje a la siguiente actividad (tal vez un código de estado, datos de mapas, lo que sea), y termina sacando un valor nulo del
Intent
.A primera vista parece bastante razonable. Sólo:
En
MenuActivity.java
:En
NextActivity.java
:Fwiw, el JavaDoc hace decir que
Intent.getStringExtra(String)
puede volvernull
, pero sólo si no se ha encontrado la etiqueta. Claramente estoy usando la misma etiqueta, por lo que debe ser otra cosa ...fuente
C
¡Solo una lectura rápida del búfer, donde el programador incluso ha tenido la amabilidad de documentar el peligro potencial!
fuente
Nimrod
fuente
C#
Esto es clasico. El método muy útil
FindStringRepresentationOf
creará una nueva instancia del parámetro de tipo especificado, luego encontrará la representación de cadena de esa instancia.Seguramente será un desperdicio verificarlo
null
inmediatamente después de haber creado una nueva instancia, por lo que no lo he hecho ...Después de haber solucionado el problema como se describe en el texto invisible anterior, intente también
goodInstance.GetType()
(la diferencia es queGetType()
, a diferenciaToString()
, no es virtual, por lo que no pudieronoverride
hacerlo en el tipoNullable<>
).fuente
C ++:
Lo que esperarías es "¡Hola Mundo!" para ser impreso Pero solo verá basura en la pantalla.
Aquí el a1 se destruye cuando finaliza el ámbito init (). Entonces a_ptr, como apunta a a1, producirá basura.
fuente
C
Explicación
fuente