Saçma Çalışma Zamanı Hataları [kapalı]


40

Çılgın, belirsiz, saçma veya sadece düz ceviz çalışma zamanı hataları üreten programlar yazın. Şaşırtma ve golf (kısalık) gerekli değildir.

  • iyi çalışması gerektiği gibi görünen çözümler daha iyidir.
  • Bir yolu kırmalı, diğerini kırmalı gibi görünen çözümler daha iyidir.
  • Belirsiz çözümler, bazen tekrarlanabilir oldukları sürece daha iyidir.
  • hata nedeni ile tezahürü arasında uzun mesafeli çözümler daha iyidir.
  • imkansız olması gereken hataların üretilmesi için bonus puanlar.
  • Çalışma zamanını bozan hatalar (python segmenti hatası yapmak gibi) veya işletim sistemi için bonus puan.

Puan birimi en fazla oy alacaktır.

Zeyilname 1

Derleyici hatalı davranışları da iyi.


2
Python segfault'u yapmak kolaydır:import sys; sys.setrecursionlimit(~-2**31); x=lambda x:x(x); x(x);
marinus

Peter: boğmaca. Soruyu yarı yolda yazarak tekrar ettim: S
Wug

... malbolge veya INTERCAL ne olacak? Çok çılgınca hatalar yaşayacağına eminim, muhtemelen tek bir karakterle de yapabilir.
Kokolin

1
Bu kesinlikle çözüme kavuşturulacak en iyi bağlantıdır: destroyallsoftware.com/talks/wat :-)
seri

Yanıtlar:


69

Zorunlu PHP one ( hala 5,4'ten beri sabitlenmemiş):

<?::

Çıktılar:

Ayrıştırma hatası: sözdizimi hatası, 1. satırda beklenmeyen T_PAAMAYIM_NEKUDOTAYIM

Whaa?


12
Bunu sevdim Favori hata mesajım olabilir. Bir keresinde arkadaşım Windows dizüstü bilgisayarını kurtarma bölümüne başlatmayı denedi ve ekranın tamamını "ERROR" yazan kırmızı harflerle beyaz bir kutuya dönüştürdü.
Wug

4
Kasten, ama yine de garip: "Paamayim Nekudotayim, ilk başta, iki nokta üst üste bir isim vermek için garip bir seçenek gibi görünüyordu. Ancak, Zend Engine 0.5 (PHP 3'e güç veren) yazarken, Zend ekibi buna karar vermeye karar verdi. Aslında bu iki kolon anlamına gelir - İbranice! " php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Jon Gauthier

12
@HansEngel: Evet, İbranice'de iki nokta üst üste demektir. Bunun dışında her belirteç için İngilizce kullanmak mantıklı çünkü ...? Sanırım sadece PHP ekibine sormam gerekecek.
Ry

Üzgünüm dostum, ama ''sınıftan ''(boş dize) statik yöntemi / değişkeni (boş dize) çağırıyorsunuz
Ismael Miguel

1
@IsmaelMiguel: İbranice yüzünden kafa karıştırıcı, yanlış olduğu için değil.
Ry -

61

Gcc derleme hatası:

int main()
{
        long long long a;
}

hata: uzun uzun uzun GCC için çok uzun


6
Onlar sadece bu birileri çalışacağız biliyordu long long long, eğer longve long longher ikisi de geçerlidir.
Konrad Borowski

3
Bence "a çok uzun!" daha iyi bir hata mesajı olurdu, ama bu hala harika bir cevap.
Wug

52

Windows Komut İstemi

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

Çıktı:

mutlu şu anda beklenmedik oldu.


1
Sonucu kontrol etmek için bu komutu denedim, ancak görüntülendi ^V:( zor günler bunlar
Fabricio

8
@ Fabricio, bu sadece satırı yapıştırmak için CTRL + V tuşlarına basmaktan mı kaynaklanıyordu? Komut İstemi'nde, yapıştırma için "kısayol" klavyesi ALT + SPACE, E, P'dir.
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

Bir işleve bir dize geçiremezsiniz, bunun yerine bir dize geçirmeniz gerekir!

Güncelleme: Bu kod PHP 7'de bir hata DEĞİLDİR. Nedenini kontrol etmek için bir spoiler üzerine gelin / tıklayın / dokunun (kodun nasıl çalıştığı hakkında spoiler içerir).

PHP 7'ye skaler tip bildirimleri adı verilen yeni bir özellik eklenmiştir. Bu özellik, işlev bildirimlerinde skaler tiplerin kullanılmasına izin verir.


6
Ne f *** php.
Wug

7
PHP sınıfı almaya çalışıyor string(geçerli). Tip ipucu (yaptığınız o şey) sadece sınıflar için işe yarar. Sınıf stringolmadığından bir hata yapar.
Ismael Miguel

Kodunuzu düzgün çalışıp çalışmadığını buradan kontrol edebilirsiniz: sandbox.onlinephpfunctions.com/code/…
Ismael Miguel

2
@IsmaelMiguel: Evet, neden olduğunu anlıyorum ama hata bence hala saçma.
Konrad Borowski

1
O zaman dene array(''=>array()'').
Ismael Miguel,

33

darbe

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

Ve sen bash basit bir "Merhaba dünya!" Kabul edeceğini düşünürdüm programı.


Bunun açıklaması: bash programlarına argüman olarak çift tırnak içine geçirilen dizgiler genişletilir, yani çift ​​alıntı dizenin `echo hi`içine dönüşür hi. olay tanımlayıcılarına! önek olarak kullanılır . Bu nedenle, bash değerlendirmeye çalışır , ancak başvurulan olayı bulamıyor. !"
Mego

31

Python 2.7

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

Oldukça yararsızdır oluşturur:

SyntaxError: encoding problem: with BOM

Basit bir yorum nasıl hata üretebilir?


12
En son Python tercümanlarında: ilk 2 satır başlıyorsa #ve coding:kodlama açıklaması olarak kullanılan bir sonraki sözcüğü içeriyorsa
AMK

31

Mathematica

Grafiksel çıktı oluşturmak için Mathematica'yı kullanırken, bazen programın kendisinde kullanılan özelliklere göre biçimlendirilmiş hata mesajları tetiklenir. İşte önemsiz bir örnek.

Rotate[f/0, .6]

enter image description here


11
Bu gerçekten bir hata mesajı değil, öyle mi? Sadece bir şeyi sıfıra böldüğünüzde Mathematica'nın döndürdüğü değerdir .
Ilmari Karonen

26

TI-89 Grafik Hesap Makinesi

Bunu lise hesabında örtük farklılaşmayı öğrenirken keşfettim. Girdiyseniz:

d(xy+x=0,x)

Aşağıdakileri alırsınız:

1 = 0

Bu uyarı ile ekranın altındaki küçük harflerle yazılmıştır:

Warning: May produce false equation

Bunun nedeni xy, x * ykendi sembolü olarak değil, kendi sembolü olarak yorumlanmasıdır xy.

Bunu yaparsanız İşin garibi, d(xy=0,x)elde edersiniz 0 = 0aynı uyarı ile.


22

Haskell derleyicisinin beynini patlatabilirsiniz:

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

Yakut

Kural kötüye kullanımı.

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

OSX’de çalıştırılırsa, örneğin

$ 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
Bu da ne demek oluyor?
TRiG

9
Anlamına gelir wrong number of arguments(1 for 0). Dilbilimsel mantıklılık açısından çok az dikkate alınarak İngilizce kelimeleri kullanarak tembel ve stokastik olarak üretilen bir dil aracılığıyla ifade ediyor.
histocrat

21

DOS İstemi

c:\>make love

sana verir

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

İşbirliği yapamadığım için bilgisayarıma hakaret etmeye çalışırken buna tökezledi. Bir süre beni biraz üzdüm, öğrenene kadar, bu sadece aşk olmazsa olur. Varsa, memnuniyetle başaracaktır.


5
Bu aslında makeDOS'a değil yardımcı programa adanmıştır .
Vovanium

1
Anladım:make: *** No rule to make target 'love'. Stop.
agtoever

@ agtoever Yanlış bir şekilde koşuyorsunuz.
Navin

Anladım: make: Fatal error: Don't know how to make target 'love'ama bu Unix'te. DOS'ta anlıyorum make is not recognized as an internal or external command, operable program or batch file.
lebatsnok

17

Bash (Quine hatası)

Bu hata Bash'deki bir Quine!

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

Tabii ki ilgili locale(İngilizce) olmalıdır.


1
Mine ...sonunda yazdıramadı , bu yüzden orijinal girdisinde de atlamak zorunda kaldım.
Zev Eisenberg

16

CSH

Gerçekten klasik bir cshşaka:

% make fire?
make: No match.

15

Bash - nadir bir tarihsel hata mesajının doğru yeniden oluşturulması

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

Çıktı:

lp0 on fire

Linux çekirdeği kaynağının her zamanki yerde paketten çıkarılmasını gerektirir.

Eğlenceli gerçek: eski bir şerit yazıcıyı çalıştırırken bir keresinde bu mesajı ciddi olarak aldım.


Bir hata mesajı mı, yoksa sadece programın bir çıktısı mı?
yo'

1
bash bir-liner kendisini başarılı bir şekilde döndürür, ancak ürettiği çıktı gerçek bir hata mesajıdır; komut dosyası, hatayı yazıcı sürücüsü kaynağından çeker.
Riot

ah tamam, bu yapmak için zor bir şey :-)
yo '

1
Bu arada, hata, yangın tehlikesi olan bir kağıt sıkışmasına yazdırmaya devam ettiği anlamına gelir.
Joshua

13

C (++)

Derleme zamanı hataları burada bir tane varsa ("crash.c" adlı bir dosya varsayarak).

#include "crash.c"

int main(){ return 0; }

Derleme üzerine ekranı bununla doldurur (Ctrl-C'yi hazırlayın)

                 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,

Kusursuzca derlenen başka bir snippet (hiçbir uyarı yok -Wallve C’nin güzel tip güvenliğini gösterir. </s>

#include <stdio.h>
int i;

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

Çalıştırmak verir:

Floating point exception (core dumped)

13

Yakut

Bunun üst seviye bir dilde gerçekleşmesinin garip olduğunu düşünün.

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

üretir

ArgumentError: recursive array join

10

Bu çok eski, ama BCPL'yi hatırlayanlar için

GET "LIBHDR"

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

şikayet ederdi

$8
 ^
"( ) or 8 expected"

10

R,

Bu teknik olarak bir hata değil, bir uyarıdır, ancak yine de saçmadır ve tamamen ezoterik nedenlerle ortaya çıkar.

[[EDIT]] Komik uyarıların bazı bölümlerinin nedeninin R yerine değil, RStudio'da olduğu anlaşılıyor, bu yüzden ilk düşündüğümden daha az ilginç. İlk örnek, yani plot(1:2, NotAGraphicalParameter = "ignore.me"), yine de, "çıplak" R'de yeniden üretilebilir ve kendi başına yeterince eğlencelidir. [[/ 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

R, hakaretlerimizi hatırlıyor gibi. Ama uzun sürmez.

Bunun neden olduğunu gerçekten açıklayamıyorum - fakat tekrarlanabilir. Aslında, her zaman "grafiksel olmayan bir parametre" yazdığınızda, arsa 1'e ve sonra da tamamen kusursuz bir şekilde bir arsa 2 yapdığınızda ortaya çıkar. İkinci arsa için 12 "grafiksel bir parametre değil" uyarısı almamız özellikle komik. Başka komik bir şey de NULL değerine sahip "grafiksel bir parametre değil" sağlarsanız, o zaman hiçbir koşul atılmaz:

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

Daha da saçma saptamak için, önceden çizilen komploun üstüne bazı çizgiler çizelim:

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

Bu gerekir değil adalet olmadığı sürece büyük zaman kazanın.


1
Hangi R sürümünü kullanıyorsunuz? Çünkü plot(2:3)kullandıktan hemen sonra birlikte aldığınız uyarı paketini çoğaltamıyorum plot(1:2, NotAGraphicalParameter = "ignore.me"). İçindeki bir şeyi yeniden tanımladın .Rprofilemı?
plannapus

1
Bu, Rstudio’da R’nin çalışmasına özgüdür (hem Windows’da hem de Ubuntu’da) ancak R’i linux terminalinde veya Windows Rgui’de çalıştırdığınızda oluşmaz.
lebatsnok

Sanırım Rstudio'suz modelleme işlevleriyle (lm veya glm) benzer bir şey gördüm ama şimdi çoğaltamıyorum. (Yani, artık alakalı olmadığında daha erken uyarılar geliyordu.)
lebatsnok

9

Windows Komut Denetimi

UYARI, bu bir çatal bomba!

Konsoldan herhangi bir şekilde çıkmaya çalışırsanız, bu işlem bırakma hakkında çöp soruları doğuracaktır.

%0|%0|%0

Bonuslar:

  • Sistemi yeniden başlatılıncaya kadar kullanılamaz hale getirecek
  • İmkansız olması gereken senaryodan çıkılmasını önler

2
Tehlike Will Robinson?
Jacob

7

q sana hakaret

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

`` u # `` qbir listedeki her öğenin benzersiz olduğunu söyler (böylece bir miktar karma tabanlı dizin oluşturabilir, muhtemelen). bu doğru olmadığında olan şey budur.


1
Dil nedir? "Size hakaret" dilini aramayı denedim ama hiçbir şey bulamadım.
Konrad Borowski

Maalesef istemeden şifreli olduğu için, dil [q] (olan en.m.wikipedia.org/wiki/... Ayrıca BTW, k4 çalışır..
Aaron Davies

6

Derleyici optimizasyon hataları nasıl olur:

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

Bu, gcc> = 4.7'ye özgüdür. Derler ve iyi çalışırgcc -O0 -Wall . İle derler gcc -O2 -Wallfakat bir inf-loop ile sonuçlanır.

Ayrıca, gcc'nin sorunu nasıl daha küçük gördüğü N, örneğin 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, bu bir hata raporundan alınmış, ancak hata numarasını hatırlayamıyorum.


3
Bu tanımsız bir davranış, derleyicinin bir şey yapmasına izin verilir. Ancak, C standardı buna izin verse bile, derleyicinin asla kullanılmayan yerel dizinin dışındaki bir atamayı ve bildirilmemiş değerin sınırsız bir döngüye değiştirmeye karar vermesine hala garip geldi. erişim arr[N](dizinin dışında) ve erişim arr[0](başlatılmamış). Tanımlanamayan davranış için herhangi bir şeye izin verildiğinden, bu optimizasyon hatası değildir, ancak kullanıcının istediği gibi olması pek olası değildir.
Konrad Borowski

4
Bu açıkça bir derleyici optimizasyon hatası değildir. UB, UB'dir ve tüm verilerinizi sabit sürücünüzden kaldırmaya karar vermesine rağmen derleyici doğru olacaktır.
H2CO3

5

APL'deki bu garipliği her zaman sevdim:

      ⍝ Açıkçası bir sözdizimi hatası
      {(]} 3  
SÖZDİZİMİ HATASI
      {(]} 3

      ⍝ ama:
      {(]} 1 ÷ 0
DOMAIN ERROR
      {(]} 1 0 ÷ 

      Stat statik olarak tanımlanmış fonksiyonlarla bile çalışır
      ∇z ← fx
[1] z ← [{]} x
[2] ∇
      f 1 ÷ 0
DOMAIN ERROR
      f 1 ÷ 0
     ∧
      f 3
SÖZDİZİMİ HATASI
f [1] z ← [{]} x     

İşlevlerin içini tembelce ayrıştırır!


4

PHP

<?php
[][] = 42;

[]elemanları itmek için kullanılır. Bununla birlikte, dizi değişmezi için kullanırsanız, itmek için atanmış olsanız bile PHP çılgınca hata mesajı verir. PHP> = 5.4 gerektirir, bundan önce olduğu gibi dizi değişmezlerini dizine ekleyemezsiniz.

Çıktı:

Ölümcül hata : okuma için [] kullanamazsınız [...] [...] on line 2


4

piton

İç içe bloklar

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

Kendi kendine referans listeleri

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

Doğru bir sabit değil

Aşağıdaki örnekte problem Python 2.7'de Trueve Falsesabit olmamasıdır. Ve Trueve Falseotomatik döküm alabilirsiniz 1ve 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)

Hatayı anladın mı?

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

Tabları ve boşlukları karıştırmak Python 2.7’de tamamdı ... ama girinti seviyesine dikkat edin!


1
Yığın Değişim platformu, tabülatörlerin kodlamasına izin vermediğinden karıştırma alanları ve tabülatörler örneği düzgün çalışmıyor.
Konrad Borowski

@ xfix: Tamam, ama sanırım bunu okuyan insanlar bu konuya değiniyor. Çoğu editör de boşluk / sekme göstermez (izleyen boşluklar hariç) ve eğer gösterirlerse, çoğu zaman gri renktedir. Ve diğer her dilde (boşluk hariç), boşluklar en azından bir tane olduğu sürece farketmez.
Martin Thoma

Programlarınızı Whitespace programlama dilinde yazmalısınız.
Alexander

Python 3 bir şaka mı?
Ry -

@ minitech Hiçbir fikrim yok. Yapması gereken bu print a.
Justin,

3

Başlayacağım:

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

Bu programın neden çöktüğünü tahmin eden var mı? : D

Koşuya bakın jane: http://ideone.com/gtaZ3


1
Bu oldukça basit bir sonsuz özyineleme değil mi? B::BreakHorriblyçağrılmadan önce kendisini çağırır doSomethingDiabolical, bu yüzden delete thisasla ulaşılmaz.
marinus

Bu program birçok nedenden dolayı patlar. Farklı yazdırma deyimlerini kaldırırsanız davranışı değişir. Ancak haklısın. Bir kez sahip olduğum tanımsız davranışı yeniden üretecek zamanım olmadı, fakat çalışma zamanında saf bir sanal işlev çağrısı elde ettim.
Wug

2
Yanlışlıkla bir şey yazdığınızı söylemiyorsunuz, değil delete thismi?
saat

Hayır, bundan daha
zekiydi

3

darbe

Bugün, sistemi korumanın mümkün olup olmadığını öğrenmeye çalıştığımda bunu anladım rm -rf /.

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

Hata mesajı 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'

Bu uyarı geliyor rm, değil bash. bashAyarlamak için kullandığınızı düşünerek, başlıkta hangi dili belirtmeniz gerektiğinden emin değilsiniz .

2

R,

Saçma olmayan ve yine bir hatadan ziyade bir uyarı olan ama yine de hoş olan bir başkası:

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

Son parçayı beğendim: 50 veya daha fazla :)

Ve gerçek uyarılar:

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

EĞLENCE = EĞLENCE!


1
Nyan Kodu ?! Bu gerçekten garip!
Kroltan

Beklenmedik ya da şaşırtıcı olanı göremiyorum. Olumsuz bir ürünün logu olması gerektiği gibi değil A No (NaN).
plannapus

2

CPython

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

Sonuç:

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.

Python 3: 'te daha da iyi ctypes.pythonapi._Py_Dealloc(ctypes.py_object(None)).
kirbyfan64sos 22:15

2

Bash - karşı-sezgisel kaçış hatası

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

döner

-bash: !11: event not found

(Komut satırındaki tarihin genişlemesi çift tırnakla engellenmez)

Bonus:

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

Çıktının beklenenden olması muhtemel değildir. Komutu tekrar almak için yukarıya basın ve yazdığınızdan değiştiğini görün. Birkaç kez basıp girerseniz, çıktınızın biraz korkunç görünmeye başlaması muhtemeldir. Kendin için dene.


2
Bu cevap codegolf.stackexchange.com/a/17776 bir kopyasıdır .
Dennis,

2

Özyinelemeli, tembel Fibonacci jeneratör

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

Bu kod iyi görünüyor, değil mi? Oldukça basit bir Fibonacci jeneratör, bazı özyineleme ve tembel numaralandırma ile baharatlı. Çalışmalı.

Hayır! Bunu çalıştırmak bir OverflowException'a neden olacaktır. Bunun nedeni ondalık kullanıyoruz ve 141. Fibonacci sayısı (~ 8.1E28), ondalık değerin (~ 7.9E28) maksimum değerini aşıyor.

İnt, ancak maksimum değerini aştığınızda bir OverflowException atmaz. Bunun yerine, beklendiği gibi, negatif bir değere taşar. Yani int yerine ondalık ile değiştirirsek, aşağıdaki kodda olduğu gibi çalışması gerekir, değil mi?

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

Eğer kodu okursanız, bunun neden işe yaramayacağı açık olmalıdır. Yapmadıysanız ... Sadece türünü ondalık değerden int olarak değiştirmedim; Ayrıca foreach ifadesindeki ToList () çağrısına gizlice girdim. Bu sayılan numaralandırıcının istekli olarak değerlendirilmesine zorlanacaktır. Bu, 141 özyinelemeye değil, sonsuz sayıda özyinelemeye neden olur. Aslında, sonsuzluğa ulaşmadan çok önce, elbette yığının üzerine taşacak ve çalışma zamanının bir StackOverflowException vermesine neden olacaktır. (bonus: bu istisna yakalanamaz, bu nedenle çalışma zamanını düşürür)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.