Code-Golf:编译和崩溃的最短程序是什么?

时间:2009-11-20 13:29:14

标签: programming-languages code-golf

这有点儿有趣。你可以设计一个最短的程序,它可以编译但什么都不做,但在执行时会立即崩溃?因此,“崩溃”意味着程序因错误条件(例如核心转储)而停止。

使用gcc编译器是否有比C更快崩溃的语言(7个字符)? [我留下这个答案供有人找。]

(应该允许使用编译器标志。否则7现在不能工作,编译器检查变得更好。)

[结果评估]我无法标记单个答案,因为多种语言有多个正确答案。将一个答案换成另一个答案是不公平的。请用投票选出最佳答案。

35 个答案:

答案 0 :(得分:128)

Bah - 我可以用5个字符崩溃C:

main;

这声明了一个名为'main'的隐式int变量。 它是全局的,因此变量的初始值为0。 它是C,名称没有被装饰 - 所以链接器没有意识到它是一个var而不是一个函数。

GCC给了我一个警告 - 但就是这样。

$ gcc crash.c 
crash.c:1: warning: data definition has no type or storage class
$ ./a.exe
Segmentation fault (core dumped)
$

答案 1 :(得分:67)

0字符崩溃:

$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault

答案 2 :(得分:49)

我想知道这是否重要......

a

这是在JavaScript中。这会给出“未找到对象”的运行时错误。由于JavaScript是一种动态语言,从语法上讲这实际上是正确的。仍然感觉像扭曲规则。 :P

答案 3 :(得分:47)

使用python:

1/0

答案 4 :(得分:33)

X86机器码:1字节

从Windows中的cmd提示符创建包含字节F4的文件a.com,x86暂停指令:

F:\>debug
-a 100
0BFD:0100 hlt
0BFD:0101
-r cx
CX 0000
:1
-n a.com
-w
Writing 00001 bytes
-q

F:\>a.com

NTVDM CPU遇到了非法指令

答案 5 :(得分:24)

$ cat > crash.S
hlt
$ as -o crash.o crash.S
$ ld crash.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048054
$ ./a.out
Segmentation fault

答案 6 :(得分:23)

的Perl

die
Died at test line 1.

die

  

将LIST的值打印到STDERR并以当前值$退出! (错误)。

答案 7 :(得分:11)

如果您在拥有TI-89的计算机商店,可以通过输入以下内容来崩溃:

Exec "00000000"

(那是8个零)

它将产生“非法指令”。按2nd + Left + Right + ON重置calc。

如果您想获得更多乐趣,请执行以下操作:

Exec "4E4A4E750000"

启动隐藏的硬件测试菜单,包括内存测试,LCD测试(绘制棋盘等)等。不幸的是,状态栏被删除了,并且calc的操作系统中没有任何内容将它拉回来,所以要自己清理,按照上面的说明进行重置,或者这样做:

Exec "307C56E670FF20C020C020C020C020C04E750000"

答案 8 :(得分:11)

Commodore 64 BASIC:

poke 2,2:sys2

或更短(使用PETSCII graphic-char快捷键):

pO2,2:sY2

(崩溃:MOS / CSG6510上的$ 02无效操作码)。实际上它可以用7个字节(3个指令)完成:

lda #$02
sta $02
jmp $0002

答案 9 :(得分:10)

Brainf * CK

5个字符

+[>+]

这需要一段时间,但最终程序将耗尽内存并不可避免地崩溃。

答案 10 :(得分:8)

因子(或Forth)

.

“数据堆栈下溢”

答案 11 :(得分:7)

引用this answer

  

所有这些答案都没有Befunge? ID   下注金额最短   解决这些问题:

1
     

不开玩笑。亲自尝试一下:   http://www.quirkster.com/js/befunge.html

     编辑:我想我需要解释一下   一。 1操作数将1推入   Befunge的内部筹码和缺乏   其他任何东西都把它放在一个循环中   根据语言规则。

     

使用提供的口译员,你   最终 - 我的意思是   最终 - 达到了一个点   代表的Javascript数组   Befunge堆栈变得太大了   浏览器重新分配。如果你有   一个简单的Befunge解释器   更小和有界的堆栈 - 就像是   大多数语言的案例   下面 - 这个程序会引起更多   明显溢出更快。

答案 12 :(得分:7)

java Z怎么样?如果不存在任何文件,它将与java.lang.NoClassDefFoundError“崩溃”。所以我的回答是零信。如果那是无效的那么......

class T{}

会“崩溃”  $ java T. 线程“main”中的异常java.lang.NoSuchMethodError:main

如果你想要实际运行的东西,那么如果你愿意滥用一些东西

class T{static {int i =1/0;}}

其他

class T{public static void main(String[]a){main(a);}}

答案 13 :(得分:6)

在C中,20个字符:

void main(){main();}

更新:建议由鱼子,15个字符:

main(){main();}

注意:使用VC ++ 2008进行测试。

答案 14 :(得分:5)

迟到了,不管怎样。 PHP,32个字符。

$r=function($z){$z($z);};$r($r);

给出Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in ...

从技术上讲,我也可以在29岁时使用

$r=function($z){$z();};$r(0);

但这并不像无限递归那么有趣。那,我不认为“未定义的函数”错误应该算作脚本语言中的“编译”,否则:

Z();

将是最小的解决方案。

此外,而不是崩溃,如何(作为一个脚本)超过最大执行时间? 8个字符:

for(;;);

我的原始版本在for循环的第三个表达式中有一个$i++,但由于PHP将所有整数视为已签名,而不是溢出,它只是消极。

答案 15 :(得分:4)

方案:

(1)

填充文字以延长时间。

答案 16 :(得分:4)

在汇编中试试这个:

push 0
ret

当然要将所有其他垃圾添加到应用程序中。

答案 17 :(得分:4)

只有2个字符的Perl。

&a
Undefined subroutine &main::a called at test.pl line 1.

答案 18 :(得分:4)

Windows PowerShell中的

throw

答案 19 :(得分:3)

Golfscript - 1 Char

许多运营商都可以做到,例如

*
(eval):1:in `initialize': undefined method `class_id' for nil:NilClass (NoMethodError)
from ../golfscript.rb:285:in `call'
from ../golfscript.rb:285:in `go'
from (eval):1:in `initialize'
from ../golfscript.rb:285:in `call'
from ../golfscript.rb:285:in `go'
from ../golfscript.rb:477

答案 20 :(得分:3)

main = undefined

在Haskell。

答案 21 :(得分:3)

在C中,33个字符:

int main(void){return*((int*)0);}

答案 22 :(得分:3)

在QBasic中:

? 1/0

(至少我认为它仍然会编译,然后以零除的方式崩溃;已经有一段时间......)

答案 23 :(得分:2)

F#3个字符

1/0

编译是否会发出警告。

答案 24 :(得分:2)

F#,11个字符

box 0 :?> unit

编译时没有警告。崩溃: System.InvalidCastException:无法将类型为“System.Int32”的对象强制转换为“Microsoft.FSharp.Core.Unit”。

答案 25 :(得分:2)

Lua,3个字符

除以零不会导致Lua出现问题,但这里有一些简短的说法:

a()

给出:

lua: isort.lua:1: attempt to call global 'a' (a nil value)
stack traceback:
    a.lua:1: in main chunk
    [C]: ?

答案 26 :(得分:2)

PostScript,1个字符

喜欢GolfScript:

*

语法合法,但在运行时崩溃,因为未定义标记*(与GolfScript崩溃的原因不同)。

答案 27 :(得分:1)

0字节

使用A86,您可以拥有零大小的源文件!

使用DOS命令提示符:

> copy con crash.asm
[ctrl-z]
1 file(s) copied
> dir *.asm
11/12/2009  13:59                 0 crash.asm
> a86 crash.asm
A86 macro assembler, V4.05 Copyright 2000 Eric Isaacson
Source:
crash.asm
Object: crash.COM
Symbols: crash.SYM
> dir *.com
11/12/2009  13:59                 0 CRASH.COM
> c.com

答案 28 :(得分:1)

NASM

mov al, [0]

$ nasm -f elf64 -o crash.o crash.asm
$ ld -o crash crash.o
$ ./crash

答案 29 :(得分:1)

的Perl

3个字符

1/0

产地:

Illegal division by zero at crash.pl line 1.

(仍在寻找可以在两个方面做到的事情......)

答案 30 :(得分:1)

C#,37个字符

class F{static void Main(){Main();}}

爆炸堆栈。

答案 31 :(得分:1)

int main () { int n = 0; return 1 / n; }

答案 32 :(得分:1)

它取决于线程允许的最大堆栈大小。但是在使用VC9编译时会崩溃:

int main()
{
    int a[10000000];
    return 0;
};

答案 33 :(得分:1)

<2> Befunge,1个字符

速度RCIX,从最短的程序到溢出堆栈What's the shortest code to cause a stack overflow?的几个答案也适用;最短的是befunge程序:

1

PS:Golfscript,没有简短的回答

看来golfscript http://www.golfscript.com/在这方面很糟糕:我假设有一个单字符堆栈下溢或堆栈溢出,但似乎设计不会崩溃。希望更好地了解语言的人会填写更多细节。

答案 34 :(得分:1)

Groovy 3个字符

1/0

可生产

  

java.lang.ArithmeticException:/ by   零