Erros ridículos de tempo de execução [fechado]


40

Escreva programas que produzam erros de execução loucos, obscuros, ridículos ou simplesmente malucos. Ofuscação e golfitude (falta) não são necessárias.

  • soluções que parecem funcionar bem são melhores.
  • soluções que parecem que deveriam quebrar de um jeito, mas quebram o outro são melhores.
  • soluções não determinísticas são melhores desde que sejam reproduzíveis às vezes.
  • soluções com longa distância entre a causa do erro e a manifestação são melhores.
  • pontos de bônus por produzir erros que deveriam ser impossíveis.
  • pontos de bônus por erros que interrompem o tempo de execução (como falha no segmento de python) ou sistema operacional.

A unidade de pontuação deve receber votos positivos.

Adenda 1

Os comportamentos inadequados do compilador também são bons.


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

Peter: gritos. I reaproveitado a questão meio de escrevê-lo: S
Wug

... e Malbolge ou INTERCAL? Eu tenho certeza que eles teriam alguns erros bastante insanos, provavelmente também podem fazê-lo com um único caractere.
Acolito #

11
Definitivamente, este é o melhor link para a solução: destroyallsoftware.com/talks/wat :-)
seri

Respostas:


69

O obrigatório PHP (que ainda não foi corrigido a partir da versão 5.4):

<?::

Saídas:

Erro de análise: erro de sintaxe, T_PAAMAYIM_NEKUDOTAYIM inesperado na linha 1

O que?


12
Eu gosto deste. Pode ser minha mensagem de erro favorita. Além da vez em que meu amigo tentou inicializar o laptop do Windows na partição de recuperação, ele transformou a tela inteira em uma caixa branca com letras vermelhas gigantes com a inscrição "ERRO".
Wug

4
Deliberado, mas estranho: "Paamayim Nekudotayim pareceria inicialmente uma escolha estranha para nomear dois pontos-e-dois-pontos. No entanto, ao escrever o Zend Engine 0.5 (que usa o PHP 3), foi assim que a equipe do Zend decidiu chamá-lo Na verdade, significa dois-pontos - em hebraico! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@HansEngel: Sim, significa dois-pontos em hebraico. Usar o inglês para todos os tokens, exceto este, faz sentido porque ...? Eu acho que só teria que perguntar à equipe PHP.
Ry-

Desculpe cara, mas você está simplesmente chamando o método static / variável ''(string vazia) da classe ''(string vazia)
Ismael Miguel

11
@IsmaelMiguel: É confuso por causa do hebraico, não porque está errado.
Ry-

61

Erro de compilação do Gcc:

int main()
{
        long long long a;
}

erro: longo longo longo é muito longo para o GCC


6
Eles apenas sabiam que alguém tentaria long long long, se longe long longsão válidos.
precisa saber é o seguinte

3
Eu acho que "um é muito longo!" teria sido uma mensagem de erro melhor, mas ainda é uma ótima resposta.
Wug

52

Prompt de Comando do Windows

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

Saída:

feliz era inesperado neste momento.


11
Tentei esse comando para verificar o resultado, mas exibido ^V:( dias difíceis estes
Fabricio

8
@ Fabricio, isso foi apenas pressionando CTRL + V para colar a linha? Na Command Prompt, o teclado "atalho" para a pasta é ALT + ESPAÇO, E, P.
Mão-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

Você não pode passar uma string para uma função, você deve passar uma string!

Atualização: Este código NÃO é um erro no PHP 7. Passe o mouse / clique / toque em um spoiler para verificar o porquê (contém spoilers sobre como o código funciona).

Um novo recurso conhecido como declaração de tipo escalar foi adicionado no PHP 7. Esse recurso permite o uso de tipos escalares em declarações de função.


6
Que porra é essa?
Wug

7
O PHP está tentando obter a classe string(que é válida). Sugestões de tipo (o que você está fazendo) só funcionam para as classes. Como a classe stringnão existe, gera um erro.
Ismael Miguel

Você pode conferir aqui código de seu trabalho corretamente: sandbox.onlinephpfunctions.com/code/...
Ismael Miguel

2
@IsmaelMiguel: Sim, eu entendo por que isso acontece, mas o erro ainda é ridículo na minha opinião.
21978 Konrad Borowski

11
Então tente array(''=>array()'').
Ismael Miguel

33

bater

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

E você pensaria que o bash aceitaria um simples "Olá, mundo!" programa.


Explicação: seqüências de caracteres passadas entre aspas duplas à medida que argumentos para programas no bash são expandidos, ou seja, `echo hi`se transformam hidentro da sequência de aspas duplas. !é usado como um prefixo para designadores de eventos . Portanto, o bash tenta avaliar !", mas não consegue encontrar o evento referenciado.
Mego

31

Python 2.7

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

Gera o bastante inútil:

SyntaxError: encoding problem: with BOM

Como um simples comentário pode gerar um erro?


12
Em mais intérpretes Python: se 2 primeiras linhas começa com #e contêm seqüência coding:próxima palavra usada como descrição codificação
AMK

31

Mathematica

Ao usar o Mathematica para criar saída gráfica, algumas vezes dispara mensagens de erro formatadas de acordo com as especificações usadas no próprio programa. Aqui está um exemplo trivial.

Rotate[f/0, .6]

insira a descrição da imagem aqui


11
Não é realmente uma mensagem de erro, é? É apenas o valor que o Mathematica retorna quando você divide algo por zero.
Ilmari Karonen

26

Calculadora gráfica TI-89

Descobri isso ao aprender sobre diferenciação implícita no cálculo do ensino médio. Se você digitar:

d(xy+x=0,x)

Você obtém o seguinte:

1 = 0

Com esta ressalva, impressa em minúsculas letras na parte inferior da tela:

Warning: May produce false equation

Isso acontece porque xynão é interpretado como x * y, mas como seu próprio símbolo xy.

Estranhamente, se o fizer d(xy=0,x), você recebe 0 = 0o mesmo aviso.


22

Você pode fazer o cérebro do compilador Haskell explodir:

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

Rubi

Regras 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

Se executado no OSX, produz, por exemplo,

$ 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>'

6
O que diabos isso significa?
TRiG 15/03

9
Isso significa wrong number of arguments(1 for 0). Ele está expressando isso através de uma linguagem que é gerada preguiçosa e estocástica usando o vocabulário inglês com pouca consideração pela plausibilidade linguística.
histocrat

21

Prompt do DOS

c:\>make love

da-te

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

Deparei com isso enquanto tentava insultar meu computador por não cooperar. Fiquei meio triste por um tempo até descobrir, que isso só acontece se o amor não existe. Se existir, ele terá prazer em fazê-lo.


5
Na verdade, isso é dedicado ao makeutilitário, não ao próprio DOS.
Vovanium 06/06

11
Eu recebo:make: *** No rule to make target 'love'. Stop.
agtoever

@agtoever Você está executando a marca errada.
Navin

Eu entendo: make: Fatal error: Don't know how to make target 'love'mas isso é no Unix. No DOS, eu entendo make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Bash (erro Quine)

Este erro é um Quine no Bash!

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

Claro que você deve ter o relevante locale(inglês aqui).


11
O meu não imprimiu o ...no final, então eu tive que omiti-lo na entrada original também.
Zev Eisenberg

16

CSH

Uma cshpiada realmente clássica :

% make fire?
make: No match.

15

Bash - recriação precisa de uma rara mensagem de erro histórica

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

Saída:

lp0 on fire

Requer que a fonte do kernel do linux seja descompactada no local usual.

Curiosidade: uma vez recebi essa mensagem a sério, ao executar uma impressora de fita antiga.


É uma mensagem de erro ou apenas uma saída de um programa?
yo '

11
@yo ', o one-liner do bash retorna com êxito, mas a saída que produz é uma mensagem de erro genuína; o script simplesmente extrai o erro da fonte do driver da impressora.
Riot

ah ok, isso é uma coisa complicada de se fazer :-)
yo '

11
Incidentalmente, o erro significa que continua imprimindo em um congestionamento de papel, o que é um risco de incêndio.
Joshua

13

C (++)

Se os erros em tempo de compilação contam, aqui está um (assumindo um arquivo chamado "crash.c").

#include "crash.c"

int main(){ return 0; }

Ele preenche a tela com isso na compilação (tenha Ctrl-C pronto)

                 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,

Outro trecho que compila perfeitamente (sem avisos -Walle ilustra a bela segurança de tipo de C </s>

#include <stdio.h>
int i;

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

Executá-lo fornece:

Floating point exception (core dumped)

13

Rubi

Parece estranho que isso possa acontecer em um idioma de alto nível.

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

produz

ArgumentError: recursive array join

10

Isso é muito antigo, mas para quem se lembra da BCPL,

GET "LIBHDR"

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

reclamaria

$8
 ^
"( ) or 8 expected"

10

R

Tecnicamente, isso não é um erro, mas um aviso, mas é ridículo e ocorre por razões completamente esotéricas.

[[EDIT]] Parece que a causa de algumas partes dos avisos engraçados reside no RStudio e não no R, por isso, é menos interessante do que eu pensava. O primeiro exemplo, ou plot(1:2, NotAGraphicalParameter = "ignore.me")seja, ainda é reproduzível no R "nu" e é engraçado o suficiente por si só. [[/ 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

É como se R se lembrasse de nossos insultos. Mas não por muito.

Eu realmente não posso explicar por que isso acontece - mas é reproduzível. Na verdade, isso ocorre sempre que você fornece algum "parâmetro não gráfico" ao gráfico 1 e, em seguida, executa o gráfico 2 de uma maneira completamente impecável. É especialmente engraçado que recebamos 12 avisos "não como parâmetro gráfico" para o segundo gráfico, mas apenas 6 para o primeiro. Outra coisa engraçada é que, se você fornecer "não um parâmetro gráfico" com um valor NULL, nenhuma condição será lançada:

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

E, para ficar ainda mais ridículo, vamos desenhar algumas linhas no topo da trama desenhada anteriormente:

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

Isto deveria não ganhar muito tempo, a menos que não haja justiça.


11
Qual versão do R você está usando? Porque não consigo reproduzir o pacote de avisos que você recebe plot(2:3)logo após o uso plot(1:2, NotAGraphicalParameter = "ignore.me"). Você redefiniu algo no seu .Rprofile?
plannapus

11
Parece que isso é específico para executar o R ​​no Rstudio (no Windows e no Ubuntu), mas não ocorre quando você executa o R no terminal linux ou no Windows Rgui.
Lebatsnok

Acho que vi algo semelhante com as funções de modelagem (lm ou glm) sem o Rstudio, mas não posso reproduzi-lo agora. (Isto é, advertências anteriores foram chegando quando não é relevante mais.)
lebatsnok

9

Script de Comando do Windows

AVISO, esta é uma bomba de garfo!

Isso resultará em perguntas inúteis sobre como encerrar se você tentar encerrar o console de alguma forma.

%0|%0|%0

Bônus:

  • Tornará o sistema praticamente inutilizável até a reinicialização
  • Impede o encerramento do script, o que deve ser impossível

2
Perigo Will Robinson?
Jacob

7

q insulta você

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

`` u # `` informa qque todos os elementos de uma lista são únicos (portanto, é possível criar algum tipo de índice baseado em hash, presumivelmente). é isso que acontece quando na verdade não é verdade.


11
Qual é o idioma? Tentei procurar pelo idioma "q insulta você", mas não consegui encontrar nada.
precisa

Desculpe por não ter sido intencionalmente enigmático, o idioma é [q] ( en.m.wikipedia.org/wiki/… . Também funciona em k4, BTW.
Aaron Davies

6

Que tal erros de otimização do 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;
}

Isso é específico para gcc> = 4.7. Compila e roda bem com gcc -O0 -Wall. Compila com gcc -O2 -Wallmas resulta em um loop inf.

Observe também como o gcc vê o problema em menores N, por exemplo 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];
         ^

Btw, isso foi retirado de um relatório de bug, mas não consigo lembrar o número do bug.


3
Bem, esse é um comportamento indefinido, portanto, o compilador pode fazer qualquer coisa. Mas ainda parece estranho que o compilador tenha decidido alterar uma atribuição fora da matriz local que nunca é usada e o uso de valor não declarado para um loop infinito, mesmo que o padrão C permita isso (afinal, isso depende de um comportamento indefinido - acessando arr[N](fora da matriz) e acessando arr[0](que não foi inicializado)). Como tudo é permitido para um comportamento indefinido, isso não é um erro de otimização, mas é muito improvável que seja o que o usuário queria.
precisa saber é o seguinte

4
Isso explicitamente não é um erro de otimização do compilador. UB é UB, e o compilador estaria certo, mesmo que decidisse erradicar todos os seus dados do disco rígido.
H2CO3

5

Eu sempre gostei dessa estranheza no APL:

      ⍝ obviamente um erro de sintaxe
      {(]} 3  
ERRO DE SINTAXE
      {(]} 3

      ⍝ mas:
      {(]} 1 0
ERRO DE DOMÍNIO
      {(]} 1 0 

      Even funciona mesmo com funções definidas estaticamente
      ←z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 0
ERRO DE DOMÍNIO
      f 1 0
     ∧
      f 3
ERRO DE SINTAXE
f [1] z ← [{]} x     

Analisa preguiçosamente o interior das funções!


4

PHP

<?php
[][] = 42;

[]é usado para empurrar elementos. No entanto, se você o usar para literal de matriz, o PHP emitirá uma mensagem de erro maluca, mesmo que você o atribua para enviar por push. Requer PHP> = 5.4, pois anteriormente você não podia ter literais de matriz indexados.

Saída:

Erro fatal : Não é possível usar [] para ler na [...] linha 2


4

Python

Blocos aninhados

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 auto-referência

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

Verdadeiro não é uma constante

O problema no exemplo a seguir é o do Python 2.7 Truee Falsenão é constante. E Truee Falsepode receber automaticamente escalado para 1e 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:

Intendation

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

Você recebeu o erro?

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

Misturar abas e espaços foi bom no Python 2.7 ... mas lembre-se do nível de indentação!


11
O exemplo de espaços de mistura e tabuladores não funciona corretamente, pois a plataforma Stack Exchange não permite tabuladores no código.
21978 Konrad Borowski

@ xfix: Ok, mas acho que as pessoas que lêem isso entendem. A maioria dos editores também não mostra espaços / guias (exceto espaços em branco à direita) e, se mostrarem, fica cinza na maioria das vezes. E em todos os outros idiomas (exceto no espaço em branco), os espaços em branco não importam, desde que haja pelo menos um.
Martin Thoma

Você deve escrever seus programas na linguagem de programação Whitespace.
Alexander

O Python 3 é uma piada?
Ry-

@minitech Não faço ideia. É com isso que deve fazer print a.
11743 Justin

3

Vou começar:

#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();
}

Algum palpite por que este programa falha? : D

Ver janeexecução: http://ideone.com/gtaZ3


11
Não é uma recursão infinita bastante direta? B::BreakHorriblychama a si mesmo antes de doSomethingDiabolicalser chamado, portanto delete thisnunca é alcançado.
marinus

Este programa explode por um grande número de razões. Seu comportamento muda se você remover diferentes instruções de impressão. No entanto, você está certo. Não tive tempo de reproduzir o comportamento indefinido que já tive, mas acabei recebendo uma chamada de função virtual pura em tempo de execução.
Wug

2
Você não está dizendo que uma vez digitou algo acidentalmentedelete this , não é?
deixou de girar no sentido contrário ao relógio

Não, era muito mais sutil do que isso, mas o resultado final foi o mesmo: um destruidor foi chamado para uma classe durante a execução de uma função membro
Wug

3

Bater

Eu recebi isso hoje quando tentei descobrir se é possível proteger o sistema rm -rf /.

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

A mensagem de erro com 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'

Este aviso está vindo rm, não bash. Não tenho certeza do idioma que você deve declarar no título, pois você o bashconfigurou.

2

R

Outro que não é ridículo e, mais uma vez, um aviso e não um erro, mas ainda agradável:

> 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)

Eu gosto do último bit: 50 ou mais :)

E os avisos reais:

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

FUN = FUN!


11
Código Nyan ?! Bem, isso é realmente estranho!
Kroltan 20/03/14

Não vejo o que é inesperado ou surpreendente. log de um produto negativo não é um número (NaN) como deveria.
plannapus

2

CPython

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

O 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.

Mesmo melhor em Python 3: ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos

2

Bash - falha de escape contra-intuitiva

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

retorna

-bash: !11: event not found

(a expansão do histórico na linha de comando não é impedida por aspas duplas)

Bônus:

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

É improvável que o resultado seja o esperado. Pressione para cima para obter o comando novamente e observe que ele mudou do que você digitou. Se você pressionar e digitar algumas vezes, é provável que sua saída comece a parecer um pouco horrível. Experimente você mesmo.


2
Esta resposta é uma duplicata do codegolf.stackexchange.com/a/17776 .
Dennis

2

Gerador de Fibonacci recursivo e preguiçoso

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;
        }
    }
}

Esse código parece bom, certo? Um gerador de Fibonacci bastante simples, temperado com alguma recursão e enumeração lenta. Deveria trabalhar.

Não! A execução disso causará uma OverflowException. Isso ocorre porque estamos usando decimal, e o 141º número de Fibonacci (~ 8,1E28) excede o valor máximo de decimal (~ 7,9E28).

O int, no entanto, não lança uma OverflowException quando você excede seu valor máximo. Em vez disso, como esperado, transborda para um valor negativo. Portanto, se substituirmos int por decimal, como no código a seguir, deve funcionar, certo?

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;
        }
    }
}

Se você ler o código, deve ser óbvio por que isso não funcionará. Se você não ... eu não mudei apenas o tipo de decimal para int; Também recebi uma ligação para ToList () na declaração foreach. Isso forçará o enumerador retornado a ser avidamente avaliado. Isso causará não 141 recursões, mas um número infinito de recursões. Na verdade, muito antes de atingir o infinito, é claro que ela excederá a pilha, fazendo com que o tempo de execução gere uma StackOverflowException. (bônus: esta exceção não pode ser capturada, portanto, ela travará o tempo de execução)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.