41

这有点有趣。你能设计出最短的程序,它可以编译,但在执行时会立即崩溃?因此,“崩溃”是指程序因错误情况而停止(例如核心转储)。

使用 gcc 编译器,有没有一种语言比 C 崩溃得更快(7 个字符)?[我把这个答案留给别人找。]

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

[结果评估] 我无法标记一个答案,因为多种语言有多个正确答案。取消一个答案的资格是不公平的。请使用投票来选择最佳答案。

4

35 回答 35

127

呸——我可以用 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)
$
于 2009-11-20T14:19:31.607 回答
66

0与字符崩溃:

$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault
于 2009-11-20T16:06:02.907 回答
49

请问这个算不算...

a

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

于 2009-11-20T13:46:50.240 回答
47

使用蟒蛇:

1/0
于 2009-11-20T13:40:41.327 回答
33

X86机器码:1字节

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

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 遇到非法指令

于 2009-11-20T21:22:29.310 回答
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
于 2009-11-20T13:39:41.710 回答
23

Perl

die
死于测试线 1。

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

于 2009-11-20T15:56:25.990 回答
11

Commodore 64 基本款:

poke 2,2:sys2

或更短(使用 PETSCII 图形字符快捷方式):

pO2,2:sY2

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

lda #$02
sta $02
jmp $0002
于 2009-11-22T00:33:14.597 回答
11

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

Exec "00000000"

(那是 8 个零)

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

如果您想玩得更开心,请执行以下操作:

Exec "4E4A4E750000"

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

Exec "307C56E670FF20C020C020C020C020C04E750000"
于 2009-11-22T01:25:25.863 回答
10

脑残*

5 个字符

+[>+]

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

于 2009-11-20T18:09:30.037 回答
8

因子(或第四)

.

“数据堆栈下溢”

于 2009-11-23T17:52:00.817 回答
7

怎么样java Z?如果不存在文件,它将“崩溃”并带有java.lang.NoClassDefFoundError. 所以我的答案是零字母。如果那无效,那么...

class T{}

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

如果您想要实际运行的东西,那么如果您愿意稍微滥用一下

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

别的

class T{public static void main(String[]a){main(a);}}
于 2009-11-20T13:40:36.397 回答
7

引用这个答案

所有这些答案,没有Befunge?我敢打赌,这是所有解决方案中最短的:

1

不开玩笑。自己试试吧: http ://www.quirkster.com/js/befunge.html

编辑:我想我需要解释一下。操作数 1 将 1 推入 Befunge 的内部堆栈,并且没有其他任何内容将其置于语言规则下的循环中。

使用提供的解释器,您最终会(我的意思是最终)遇到表示 Befunge 堆栈的 Javascript 数组变得太大而浏览器无法重新分配的点。如果你有一个简单的 Befunge 解释器,它的堆栈更小且有界——就像下面大多数语言的情况一样——这个程序会更快地导致更明显的溢出。

于 2009-11-21T05:55:02.933 回答
6

在 C 中,20 个字符:

void main(){main();}

更新:由 roe 建议,15 个字符:

main(){main();}

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

于 2009-11-20T13:34:39.687 回答
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(;;);

我最初的看法在$i++for 循环的第三个表达式中有一个,但是因为 PHP 将所有整数都视为有符号的,而不是溢出,它只是变成负数。

于 2009-11-24T18:28:58.940 回答
4

在汇编中试试这个:

push 0
ret

当然,添加所有其他垃圾以编译到应用程序中。

于 2009-11-20T13:34:10.793 回答
4

Perl 只有 2 个字符。

&a
未定义的子例程 &main::a 在 test.pl 第 1 行调用。
于 2009-11-22T05:15:41.390 回答
4

在 Windows PowerShell 中:

throw
于 2009-11-20T13:40:56.323 回答
4

方案:

(1)

填充文本以使其更长。

于 2009-11-20T18:32:18.623 回答
3

在 C 中,33 个字符:

int main(void){return*((int*)0);}
于 2009-11-20T13:33:23.610 回答
3

在 QBasic 中:

? 1/0

(至少我认为它仍然会编译然后被零除崩溃;已经有一段时间了......)

于 2009-11-20T13:38:11.473 回答
3

Golfscript - 1 个字符

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

*
(eval):1:in `initialize': nil:NilClass (NoMethodError) 的未定义方法 `class_id'
来自 ../golfscript.rb:285:in `call'
来自 ../golfscript.rb:285:in `go'
从(评估):1:在“初始化”中
来自 ../golfscript.rb:285:in `call'
来自 ../golfscript.rb:285:in `go'
来自../golfscript.rb:477
于 2009-11-24T23:32:33.027 回答
3
main = undefined

在哈斯克尔。

于 2009-11-24T23:35:22.680 回答
2

F#,11 个字符

box 0 :?> unit

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

于 2009-11-22T01:39:18.970 回答
2

后记,1 个字符

像 GolfScript:

*

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

于 2009-12-15T05:30:12.367 回答
2

Lua,3 个字符

除以零不会在 Lua 中引起问题,但这里的内容也很短:

a()

给出:

lua: isort.lua:1: 尝试调用全局 'a' (一个 nil 值)
堆栈回溯:
    a.lua:1: 在主块中
    [C]: ?
于 2009-11-20T21:51:07.617 回答
2

F# 3 个字符

1/0

可以编译,但会发出警告。

于 2009-11-20T15:33:39.663 回答
1
int main () { int n = 0; return 1 / n; }
于 2009-11-20T13:34:03.820 回答
1

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

int main()
{
    int a[10000000];
    return 0;
};
于 2009-11-20T13:35:02.027 回答
1

C#,37 个字符

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

爆炸堆栈。

于 2009-11-20T19:16:43.947 回答
1

Befunge,1 个字符

速度 RCIX,从最短程序溢出堆栈的几个答案导致堆栈溢出的最短代码是什么?也适用;最短的是 befunge 程序:

1

PS:Golfscript,没有简短的答案

golfscript http://www.golfscript.com/似乎在这方面很糟糕:我认为会有一个单字符的堆栈下溢或堆栈溢出,但它似乎设计为不会崩溃。希望更了解该语言的人会填写更多详细信息。

于 2009-11-23T17:47:17.693 回答
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
于 2009-12-11T14:12:58.990 回答
1

Perl

3 个字符

1/0

产生:

Illegal division by zero at crash.pl line 1.

(仍在寻找可以一分为二的东西..)

于 2009-11-20T18:28:44.247 回答
1

时髦的 3 个字符

1/0

生产

java.lang.ArithmeticException: / 由零

于 2009-12-15T02:42:08.320 回答
1

NASM

mov al, [0]

$ nasm -f elf64 -o crash.o crash.asm
$ ld -o crash crash.o
$ ./crash
于 2014-05-03T20:00:47.700 回答