Errores de tiempo de ejecución ridículos [cerrado]


40

Escriba programas que produzcan errores de tiempo de ejecución locos, oscuros, ridículos o simplemente chiflados. No se requiere ofuscación y golfitud (brevedad).

  • Las soluciones que parecen funcionar bien son mejores.
  • Las soluciones que parecen que deberían romperse en un sentido pero romper en otro son mejores.
  • las soluciones que no son deterministas son mejores siempre que sean reproducibles a veces.
  • Las soluciones con una larga distancia entre la causa del error y la manifestación son mejores.
  • puntos de bonificación por producir errores que deberían ser imposibles.
  • puntos de bonificación por errores que bloquean el tiempo de ejecución (como hacer que el segmento Python falle) o el sistema operativo.

La unidad de puntuación serán los votos a favor.

Anexo 1

Los malos comportamientos del compilador también están bien.


2
Hacer Python segfault es fácil:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Peter: whoops. Reutilicé la pregunta a la mitad de la escritura: S
Wug

... ¿qué pasa con malbolge o INTERCAL? Estoy bastante seguro de que tendrían algunos errores bastante locos, probablemente también puedan hacerlo con un solo personaje.
acólito

1
Este es definitivamente el mejor enlace para buscar la solución: destroyallsoftware.com/talks/wat :-)
seri

Respuestas:


69

El obligatorio PHP (que todavía no se ha solucionado a partir de 5.4):

<?::

Salidas:

Error de análisis: error de sintaxis, T_PAAMAYIM_NEKUDOTAYIM inesperado en la línea 1

Que?


12
Me gusta este. Puede ser mi mensaje de error favorito. Aparte de la única vez que mi amigo intentó arrancar su computadora portátil con Windows en la partición de recuperación, y convirtió toda la pantalla en un cuadro blanco con letras rojas gigantes que deletreaban "ERROR".
Wug

44
Deliberado, pero extraño, sin embargo: "Paamayim Nekudotayim, al principio, parecería una elección extraña para nombrar un doble punto. Sin embargo, mientras escribía el Zend Engine 0.5 (que funciona con PHP 3), así es como el equipo de Zend decidió llamarlo ¡En realidad significa dos puntos dobles - en hebreo! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@HansEngel: Sí, significa doble punto en hebreo. Usar inglés para cada token excepto este tiene sentido porque ...? Supongo que tendría que preguntarle al equipo de PHP.
Ry-

Lo siento amigo, pero simplemente estás llamando al método estático / variable ''(cadena vacía) de la clase ''(cadena vacía)
Ismael Miguel

1
@IsmaelMiguel: Es confuso debido al hebreo, no porque esté mal.
Ry-

61

Error de compilación de Gcc:

int main()
{
        long long long a;
}

error: largo largo largo es demasiado largo para GCC


66
Acaban de saber que alguien va a tratar long long long, si longy long longson ambos válidos.
Konrad Borowski

3
Creo que "a es demasiado largo!" hubiera sido un mejor mensaje de error, pero esta sigue siendo una gran respuesta.
Wug

52

Símbolo del sistema de Windows

If you're happy and you know it clap your hands!

Salida:

feliz era inesperado en este momento.


1
Intenté ese comando para verificar el resultado, pero mostró ^V:( días difíciles estos
Fabricio

8
@Fabricio, ¿fue solo presionar CTRL + V para pegar la línea? En el símbolo del sistema, el "atajo" del teclado para pegar es ALT + ESPACIO, E, P.
Hand-E-Food

42

PHP

$ cat error.php 
<?php
function echo_string(string $string) {
    echo $string;
}
echo_string("Hello, world!");
$ php error.php 
PHP Catchable fatal error:  Argument 1 passed to echo_string() must be an instance of string, string given, called in error.php on line 5 and defined in error.php on line 2

No puede pasar una cadena a una función, ¡debe pasar una cadena en su lugar!

Actualización: este código NO es un error en PHP 7. Desplácese / haga clic / toque un spoiler para verificar por qué (contiene spoilers sobre cómo funciona el código).

Se agregó una nueva característica conocida como declaraciones de tipo escalar en PHP 7. Esta característica permite usar tipos escalares en declaraciones de función.


66
¿Qué demonios?
Wug

77
PHP está tratando de obtener la clase string(que es válida). La sugerencia de tipos (lo que estás haciendo) solo funciona para las clases. Como la clase stringno existe, arroja un error.
Ismael Miguel

Puede verificar aquí que su código funciona correctamente: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

2
@IsmaelMiguel: Sí, entiendo por qué sucede, pero el error sigue siendo ridículo en mi opinión.
Konrad Borowski

1
Entonces inténtalo array(''=>array()'').
Ismael Miguel

33

golpetazo

$ echo "Hello, world!"
bash: !": event not found

Y pensarías que bash aceptaría un simple "¡Hola, mundo!" programa.


Explicación de esto: las cadenas pasadas entre comillas dobles como argumentos a los programas en bash se expanden, lo que significa que se `echo hi`convierte en el hiinterior de la cadena entre comillas dobles. !se usa como prefijo para los designadores de eventos . Entonces, bash intenta evaluar !", pero no puede encontrar el evento al que se hace referencia.
Mego

31

Python 2.7

# Look I'm actually coding: see my happy face?
print ':)'

Genera lo bastante inútil:

SyntaxError: encoding problem: with BOM

¿Cómo puede un simple comentario generar un error?


12
En los últimos intérpretes de Python: si las primeras 2 líneas comienzan con #y contienen una cadena, la coding:siguiente palabra se usa como descripción de codificación
AMK

31

Mathematica

Cuando se usa Mathematica para crear resultados gráficos, a veces se activan mensajes de error formateados de acuerdo con las especificaciones que se usan en el programa. Aquí hay un ejemplo trivial.

Rotate[f/0, .6]

ingrese la descripción de la imagen aquí


11
Sin embargo, eso no es realmente un mensaje de error, ¿verdad? Es solo el valor que devuelve Mathematica cuando divide algo entre cero.
Ilmari Karonen

26

Calculadora gráfica TI-89

Descubrí esto cuando aprendí sobre la diferenciación implícita en el cálculo de la escuela secundaria. Si ingresas:

d(xy+x=0,x)

Obtienes lo siguiente:

1 = 0

Con esta advertencia, impresa en minúsculas letras en la parte inferior de la pantalla:

Warning: May produce false equation

Esto sucede porque xyno se interpreta como x * y, sino más bien como su propio símbolo, xy.

Curiosamente, si lo haces d(xy=0,x), obtienes 0 = 0la misma advertencia.


22

Puedes hacer explotar el cerebro del compilador Haskell:

C:\Windows\system32>ghci
...
Prelude> :set -XExistentialQuantification
Prelude> data Foo = forall a. Foo a
Prelude> let foo f = 1 where Foo a = f

<interactive>:4:21:
    My brain just exploded
    I can't handle pattern bindings for existential or GADT data constructors.
    Instead, use a case-expression, or do-notation, to unpack the constructor.
    In the pattern: Foo a
    In a pattern binding: Foo a = f
    In an equation for `foo':
        foo f
          = 1
          where
              Foo a = f
Prelude>

22

Rubí

Reglas de abuso.

class StandardError

  def to_s
    words = File.open('/usr/share/dict/words'){|f|f.readlines.map &:chop}.sample(100)
    words.last.capitalize!
    super.gsub(/\w+/){words.pop}
  end

  to_s(3)

end

Si se ejecuta en OSX, produce, por ejemplo

$ ruby weird_runtime_error.rb 
weird_runtime_error.rb:9:in `to_s': Sculpturation contingence explicate tappet(phonendoscope ethopoeia nannandrous) (ArgumentError)
    from weird_runtime_error.rb:9:in `<class:StandardError>'
    from weird_runtime_error.rb:1:in `<main>'

66
¿Qué demonios significa eso?
TRiG

9
Significa wrong number of arguments(1 for 0). Está expresando eso a través de un lenguaje que se genera de manera perezosa y estocástica usando vocabulario en inglés con poca consideración por la plausibilidad lingüística.
histocrat

21

Mensaje de DOS

c:\>make love

te dio

Fatal Error: 'love' does not exist. Don't know how to make it.

Me topé con esto mientras intentaba insultar a mi computadora por no cooperar. Me puso un poco triste por un tiempo hasta que descubrí que esto solo sucede si el amor no existe. Si existe, lo hará con mucho gusto.


55
Esto está realmente dedicado a la makeutilidad, no al DOS en sí.
Vovanium

1
Obtengo:make: *** No rule to make target 'love'. Stop.
agtoever

@agtoever Estás ejecutando la marca incorrecta.
Navin

Entiendo: make: Fatal error: Don't know how to make target 'love'pero eso está en Unix. En DOS, entiendo make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Bash (error de Quine)

Este error es un Quine en Bash!

$ bash: bash:: command not found...
bash: bash:: command not found...

Por supuesto, debe tener el correspondiente locale(inglés aquí).


1
El mío no imprimió ...al final, así que tuve que omitirlo en la entrada original también.
Zev Eisenberg

16

CSH

Una cshbroma realmente clásica :

% make fire?
make: No match.

15

Bash: recreación precisa de un raro mensaje de error histórico

echo -ne $(tail -n +257 /usr/src/linux*/drivers/char/lp.c | head -1 | cut -d '"' -f 2 | sed 's/%d/0/')

Salida:

lp0 on fire

Requiere que la fuente del kernel de Linux se desempaquete en el lugar habitual.

Dato curioso: una vez recibí este mensaje en serio, cuando ejecutaba una impresora de cinta antigua.


¿Es un mensaje de error, o simplemente una salida de un programa?
yo '

1
@yo 'el bash one-liner en sí mismo regresa con éxito, pero el resultado que produce es un mensaje de error genuino; el script simplemente extrae el error del origen del controlador de la impresora.
Riot

ah ok, eso es algo complicado de hacer :-)
yo '

1
Por cierto, el error significa que continúa imprimiéndose en un atasco de papel, lo cual es un peligro de incendio.
Joshua

13

C (++)

Si los errores en tiempo de compilación cuentan aquí, hay uno (suponiendo un archivo llamado "crash.c").

#include "crash.c"

int main(){ return 0; }

Llena la pantalla con esto en la compilación (tenga Ctrl-C listo)

                 from crash.c:1,
                 from crash.c:1:
crash.c:3:1: error: redefinition of ‘main’
crash.c:3:1: note: previous definition of ‘main’ was here
In file included from crash.c:1:0,
                 from crash.c:1,
                 from crash.c:1,

Otro fragmento que se compila perfectamente bien (sin advertencias -Walle ilustra la hermosa seguridad de tipo de C </s>

#include <stdio.h>
int i;

int main(){
  sprintf(NULL, "%s", (char *) (void *) (1/i));
  return 0;
}

Ejecutarlo da:

Floating point exception (core dumped)

13

Rubí

Siente que es extraño que esto pueda suceder en un lenguaje de alto nivel.

$*<<$*<<$**$/

produce

ArgumentError: recursive array join

10

Esto es muy antiguo, pero para aquellos que recuerdan BCPL,

GET "LIBHDR"

LET START() = VALOF 
$8
        RESULTIS 0
$)

se quejaría

$8
 ^
"( ) or 8 expected"

10

R

Esto técnicamente no es un error, sino una advertencia, pero sin embargo es ridículo y ocurre por razones completamente esotéricas.

[[EDIT]] Parece que la causa de algunas partes de las advertencias divertidas reside en RStudio en lugar de R per se, por lo que es menos interesante de lo que pensé al principio. El primer ejemplo plot(1:2, NotAGraphicalParameter = "ignore.me")es, sin embargo, todavía reproducible en "desnudo" R y es lo suficientemente divertido por derecho propio. [[/ EDIT]]

> plot(1:2, NotAGraphicalParameter = "ignore.me")
# produces a nice scatterplot with two points, [1,1] and [2,2]
Warning messages:
1: In plot.window(...) :
  "NotAGraphicalParameter" is not a graphical parameter
2: In plot.xy(xy, type, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
4: In axis(side = side, at = at, labels = labels, ...) :
  "NotAGraphicalParameter" is not a graphical parameter
5: In box(...) : "NotAGraphicalParameter" is not a graphical parameter
6: In title(...) : "NotAGraphicalParameter" is not a graphical parameter
> plot(2:3)
# another nice scatterplot: [2,2] and [3,3] 
# but there should be nothing wrong this time!
# however ...
There were 12 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: "NotAGraphicalParameter" is not a graphical parameter
2: "NotAGraphicalParameter" is not a graphical parameter
3: "NotAGraphicalParameter" is not a graphical parameter
4: "NotAGraphicalParameter" is not a graphical parameter
5: "NotAGraphicalParameter" is not a graphical parameter
6: "NotAGraphicalParameter" is not a graphical parameter
7: "NotAGraphicalParameter" is not a graphical parameter
8: "NotAGraphicalParameter" is not a graphical parameter
9: "NotAGraphicalParameter" is not a graphical parameter
10: "NotAGraphicalParameter" is not a graphical parameter
11: "NotAGraphicalParameter" is not a graphical parameter
12: "NotAGraphicalParameter" is not a graphical parameter
# but let's try once more:
> plot(2:3)
# yup. no warnings this time. we had to do it twice

Es como si R recuerda nuestros insultos. Pero no por mucho.

Realmente no puedo explicar por qué sucede esto, pero es reproducible. En realidad, ocurre cada vez que proporciona algún "parámetro no gráfico" para trazar 1, y luego hace un diagrama 2 de una manera completamente impecable. Es especialmente divertido que recibamos 12 advertencias "no un parámetro gráfico" para el segundo gráfico, pero solo 6 para el primero. Otra cosa curiosa es que si proporciona "no un parámetro gráfico" con un valor NULL, no se genera ninguna condición:

plot(1:2, Nonsense=NULL)
# no warnings
# however
plot(1:2, Nonsense="gibberish")
# gives the usual 6-pack of warnings

Y para ser aún más ridículo, dibujemos algunas líneas sobre la trama previamente dibujada:

plot(1:2)
# you will see the number of warnings growing with each line:
lines(1:2, 1:2, mumbo = 1)
lines(1:2, 1:2, jumbo = 2)
lines(1:2, 1:2, bimbo = 3)
lines(1:2, 1:2, cucaracha = 4)
lines(1:2, 1:2, karaoke = 5)
lines(1:2, 1:2, radiogaga = 6)
lines(1:2, 1:2, reptiles = 7)
lines(1:2, 1:2, cowsonmoon = 8)
lines(1:2, 1:2, stainlessSteelLadderToTheMoon = 9)
lines(1:2, 1:2, frambuesa = 10)
lines(1:2, 1:2, fresa = 11)
lines(1:2, 1:2, limonYNada = 12)
lines(1:2, 1:2, slingsAndArrows = 13)
# ... and now you have 25 warnings:
warnings()

Warning messages:
1: "mumbo" is not a graphical parameter
2: "jumbo" is not a graphical parameter
3: "bimbo" is not a graphical parameter
4: "cucaracha" is not a graphical parameter
5: "karaoke" is not a graphical parameter
6: "radiogaga" is not a graphical parameter
7: "reptiles" is not a graphical parameter
8: "cowsonmoon" is not a graphical parameter
9: "stainlessSteelLadderToTheMoon" is not a graphical parameter
10: "frambuesa" is not a graphical parameter
11: "fresa" is not a graphical parameter
12: "limonYNada" is not a graphical parameter
13: "mumbo" is not a graphical parameter
14: "jumbo" is not a graphical parameter
15: "bimbo" is not a graphical parameter
16: "cucaracha" is not a graphical parameter
17: "karaoke" is not a graphical parameter
18: "radiogaga" is not a graphical parameter
19: "reptiles" is not a graphical parameter
20: "cowsonmoon" is not a graphical parameter
21: "stainlessSteelLadderToTheMoon" is not a graphical parameter
22: "frambuesa" is not a graphical parameter
23: "fresa" is not a graphical parameter
24: "limonYNada" is not a graphical parameter
25: In plot.xy(xy.coords(x, y), type = type, ...) :
  "slingsAndArrows" is not a graphical parameter

Esto debería no ganar a lo grande a menos que no haya justicia.


1
¿Qué versión de R estás usando? Porque no puedo reproducir el paquete de advertencias que recibes plot(2:3)justo después de usar plot(1:2, NotAGraphicalParameter = "ignore.me"). ¿Redefinirías algo en tu .Rprofile?
plannapus

1
Parece que esto es específico para ejecutar R en Rstudio (tanto en Windows como en Ubuntu), pero no ocurre cuando ejecuta R en un terminal de Linux o Windows Rgui.
lebatsnok

Creo que he visto algo similar con las funciones de modelado (lm o glm) sin Rstudio pero no puedo reproducirlo ahora. (Es decir, las advertencias anteriores aparecían cuando ya no eran relevantes.)
lebatsnok

9

Script de comandos de Windows

ADVERTENCIA, esta es una bomba tenedor!

Esto generará preguntas basura acerca de dejar de fumar si intenta salir de la consola de alguna manera.

%0|%0|%0

Bonificaciones:

  • Hará que el sistema sea prácticamente inutilizable hasta que se reinicie
  • Impide salir del script, lo que debería ser imposible

2
¿Peligro Will Robinson?
Jacob

7

q te insulta

q)`u#1 1
'u-fail
q)

`` `u #` `dice qque cada elemento de una lista es único (por lo que puede crear algún tipo de índice basado en hash, presumiblemente). Esto es lo que sucede cuando en realidad no es cierto.


1
¿Qué idioma es? Intenté buscar el lenguaje "q te insulta", pero no pude encontrar nada.
Konrad Borowski

Perdón por ser involuntariamente críptico, el idioma es [q] ( en.m.wikipedia.org/wiki/… . También funciona en k4, por cierto.
Aaron Davies

6

¿Qué hay de los errores de optimización del compilador:

#include <stdio.h>

#define N 4

int main(void)
{
    int sum;
    int i;
    int arr[N];

    for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
        sum += arr[i];
    }
    printf("%d\n", sum);
    return 0;
}

Esto es específico para gcc> = 4.7. Compila y funciona bien con gcc -O0 -Wall. Compila con gcc -O2 -Wallpero da como resultado un bucle inf.

También tenga en cuenta, cómo gcc ve el problema para los más pequeños N, por ejemplo N = 3:

test.c:11:38: warning: array subscript is above array bounds [-Warray-bounds]
  for (i = 0, sum = 0; i < N; i++, arr[i] = sum) {
                                       ^
test.c:12:13: warning: 'arr[0]' is used uninitialized in this function [-Wuninitialized]
  sum += arr[i];
         ^

Por cierto, esto se ha tomado de un informe de error, aunque no puedo recordar el número de error.


3
Bueno, este es un comportamiento indefinido, por lo que el compilador puede hacer cualquier cosa. Pero aún se siente extraño que el compilador haya decidido cambiar una asignación fuera de la matriz local que nunca se usa, y el uso de valor no declarado a un bucle infinito, incluso si el estándar C lo permite (después de todo, depende de un comportamiento indefinido) acceder arr[N](fuera de la matriz) y acceder arr[0](que no está inicializado)). Como todo está permitido para un comportamiento indefinido, este no es un error de optimización, pero es muy poco probable que sea lo que el usuario desea.
Konrad Borowski el

44
Esto no es explícitamente un error de optimización del compilador. UB es UB, y el compilador estaría en lo correcto incluso si decidiera erradicar todos sus datos de su disco duro.
H2CO3

5

Siempre me ha gustado esta rareza en APL:

      ⍝ obviamente un error de sintaxis
      {(]} 3  
ERROR DE SINTAXIS
      {(]} 3

      ⍝ pero:
      {(]} 1 ÷ 0
ERROR DE DOMINIO
      {(]} 1 ÷ 0 

      ⍝ incluso funciona con funciones estáticamente definidas
      ←z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
ERROR DE DOMINIO
      f 1 ÷ 0
     ∧
      f 3
ERROR DE SINTAXIS
f [1] z ← [{]} x     

Analiza el interior de las funciones perezosamente!


4

PHP

<?php
[][] = 42;

[]se usa para empujar elementos. Sin embargo, si lo usa para la matriz literal, el PHP genera un mensaje de error loco, incluso si lo asigna para empujar. Requiere PHP> = 5.4, ya que antes no podía haber indexado los literales de matriz.

Salida:

Error fatal : no se puede usar [] para leer en [...] [...] la línea 2


4

Pitón

Bloques anidados

for a in range(26):
 for b in range(26):
  for c in range(26):
   for d in range(26):
    for e in range(26):
     for f in range(26):
      for g in range(26):
       for h in range(26):
        for i in range(26):
         for j in range(26):
          for k in range(26):
           for l in range(26):
            for m in range(26):
             for n in range(26):
              for o in range(26):
               for p in range(26):
                for q in range(26):
                 for r in range(26):
                  for s in range(26):
                   for t in range(26):
                    for u in range(26):
                     for v in range(26):
                      for w in range(26):
                       for x in range(26):
                        for y in range(26):
                         for z in range(26):
                          print a

Python 2.7: SystemError: too many statically nested blocks

Listas de autorreferencia

def printList(myList):
    for element in myList:
        if isinstance(element, list):
            printList(myList)
        else:
            print(element)

a = []
a.append(a)
printList(a)

Python 2.7

La verdad no es una constante

El problema en el siguiente ejemplo es que en Python 2.7, Truey Falseno son constantes. Y Truey se Falsepuede convertir automáticamente en 1y 0:

True=False
a=10/True

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero

Python 2.7:

Intención

def f(n):
    if n <= 1:
        return n
    else:
        return f(n-1)+f(n-2)

¿Recibes el error?

Traceback (most recent call last):
  File "/home/moose/.config/pluma/tools/new-tool-2", line 11, in <module>
    exec(sys.stdin.read())
  File "<string>", line 4
    else:
       ^
SyntaxError: invalid syntax

Mezclar pestañas y espacios estaba bien en Python 2.7 ... ¡pero ten en cuenta el nivel de sangría!


1
El ejemplo de espacios de mezcla y tabuladores no funciona correctamente, ya que la plataforma Stack Exchange no permite tabuladores en el código.
Konrad Borowski el

@xfix: Ok, pero creo que las personas que leen esto entienden el punto. La mayoría de los editores tampoco muestran espacios / pestañas (excepto el espacio en blanco al final) y si lo muestran, la mayoría de las veces es gris. Y en cualquier otro idioma (excepto los espacios en blanco), los espacios en blanco no importan, siempre que haya al menos uno.
Martin Thoma

Debe escribir sus programas en el lenguaje de programación Whitespace.
Alexander

¿El Python 3 es una broma?
Ry-

@minitech No tengo idea. Eso es lo que se supone que debe hacer print a.
Justin

3

Yo empezare:

#include <iostream>

using namespace std;

class A
{
public:
    A()
    {
    }

    void doSomethingDiabolical()
    {
        delete this;
    }

    virtual void breakHorribly()
    {
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
    }
};

class B : public A
{
public:
    B() : A()
    {
    }

    void breakHorribly()
    {
        cout << "still alive" << endl;
        ((A *) this)->breakHorribly();
        cout << "still alive" << endl;
        doSomethingDiabolical();
        cout << "still alive" << endl;
        breakHorribly();
        cout << "dead" << endl;
    }
};

int main()
{
    jane();
}

void jane()
{
    cout << "still alive" << endl;
    A * o = new B;
    cout << "still alive" << endl;
    o->breakHorribly();
}

¿Alguna idea de por qué este programa falla? :RE

Ver janeejecutar: http://ideone.com/gtaZ3


1
¿No es esta una recursión infinita bastante sencilla? B::BreakHorriblyse llama a sí mismo antes doSomethingDiabolicalse llama, por delete thislo que nunca se alcanza.
Marinus

Este programa explota por una gran cantidad de razones. Su comportamiento cambia si elimina diferentes declaraciones de impresión. Sin embargo, tienes razón. No tuve tiempo de reproducir el comportamiento indefinido que tuve una vez, pero terminé recibiendo una llamada de función virtual pura en tiempo de ejecución.
Wug

2
No estás diciendo que una vez accidentalmente escribiste algo como delete this, ¿verdad?
dejó de girar en contra del reloj el

No, fue mucho más sutil que eso, pero el resultado final fue el mismo: se llamó a un destructor para una clase durante la ejecución de una función miembro
Wug

3

Golpetazo

Obtuve esto hoy cuando traté de averiguar si es posible proteger el sistema rm -rf /.

mkdir /tmp/a
mkdir /tmp/a/b
sudo mount --bind /tmp/a /tmp/a/b
rm -rf /tmp/a

El mensaje de error con LANG=C:

rm: WARNING: Circular directory structure.
This almost certainly means that you have a corrupted file system.
NOTIFY YOUR SYSTEM MANAGER.
The following directory is part of the cycle:
  '/tmp/a/b'

Esta advertencia proviene rm, no bash. No estoy seguro de qué idioma debe declarar en el título, dado que solía bashconfigurarlo.

2

R

Otro que no es ridículo y, de nuevo, una advertencia en lugar de un error, pero sigue siendo agradable:

> sapply(as.list(-1:-51), log)
 [1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[20] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[39] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
There were 50 or more warnings (use warnings() to see the first 50)

Me gusta el último bit: 50 o más :)

Y las advertencias reales:

1: In lapply(X = X, FUN = FUN, ...) : NaNs produced
2: In lapply(X = X, FUN = FUN, ...) : NaNs produced
....
50: In lapply(X = X, FUN = FUN, ...) : NaNs produced

DIVERSIÓN = DIVERSIÓN!


1
Nyan Code ?! Bueno, eso es extraño de verdad!
Kroltan

No veo lo inesperado o sorprendente. registro de un producto negativo No es un número (NaN) como debería.
plannapus

2

CPython

import ctypes
import sys
(ctypes.c_char * sys.getsizeof(None)).from_address(id(None))[:4] = '\x00' * 4

El resultado:

Fatal Python error: deallocating None

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Aún mejor en Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Bash - falla de escape contraintuitiva

echo "this should definitely work!!!11!"

devoluciones

-bash: !11: event not found

(la expansión del historial en la línea de comandos no se evita mediante comillas dobles)

Prima:

echo "I don't know what's gone wrong!! !echo is usually pretty foolproof!-1"

Es poco probable que la salida sea lo que se espera. Presione hacia arriba para obtener el comando nuevamente y observe que ha cambiado de lo que escribió. Si presiona hacia arriba e ingresa un par de veces, es probable que su salida comience a verse algo horrible. Pruébalo por ti mismo.


2
Esta respuesta es un duplicado de codegolf.stackexchange.com/a/17776 .
Dennis

2

C # - Generador de Fibonacci perezoso y recursivo

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<decimal> fib(decimal n = 0, decimal m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m))
        {
            yield return x;
        }
    }
}

Este código se ve bien, ¿verdad? Un generador de Fibonacci bastante simple, aderezado con cierta recursión y enumeración perezosa. Deberia trabajar.

No! Ejecutar esto provocará una Excepción de desbordamiento. Esto se debe a que estamos usando decimal, y el número 141 de Fibonacci (~ 8.1E28) excede el valor máximo de decimal (~ 7.9E28).

Sin embargo, int no genera una excepción OverflowException cuando excede su valor máximo. En cambio, como se esperaba, se desborda a un valor negativo. Entonces, si reemplazamos int en lugar de decimal, como en el siguiente código, debería funcionar, ¿verdad?

static void Main()
{
    Console.WriteLine(string.Join(",", fib().Take(141)));
    Console.ReadLine();
}

static IEnumerable<int> fib(int n = 0, int m = 1)
{
    if (n == 0)
    {
        yield return 0;
        yield return 1;
    }
    while (true)
    {
        yield return n + m;
        foreach(var x in fib(m, n+m).ToList())
        {
            yield return x;
        }
    }
}

Si lees el código, debería ser obvio por qué esto no funcionará. Si no lo hiciste ... no solo cambié el tipo de decimal a int; También ingresé una llamada a ToList () en la declaración foreach. Esto obligará al enumerador devuelto a ser evaluado con entusiasmo. Esto causará no 141 recursiones, sino un número infinito de recursiones. En realidad, mucho antes de que llegue al infinito, por supuesto, desbordará la pila, causando que el tiempo de ejecución arroje una StackOverflowException. (Bonificación: esta excepción no se puede detectar, por lo que bloqueará el tiempo de ejecución)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.