代码 – 高尔夫:编译和崩溃的最短程序是什么?

这有点儿乐趣 你能制定最短的程序,编译但是什么都不做,但是执行时立即崩溃吗? 因此,“崩溃”是指程序停止时出现错误情况(例如核心转储)。

有一种语言崩溃比C使用gcc编译器更快(7个字符)? [我留下这个答案让别人find。]

(应该可以使用编译器标志,否则7现在不行,编译器检查好多了。)

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

巴 – 我可以在5个字符中崩溃C:

main; 

这声明了一个名为“main”的隐式intvariables。 这是全局性的,所以variables的初始值为0 。 这是C名称没有装饰 – 所以链接器没有意识到,这是一个变种,而不是一个function。

海湾合作委员会给了我一个警告 – 但就是这样。

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

碰撞0字符:

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

我想知道这是否重要…

 a 

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

使用python:

 1/0 

X86机器码:1个字节

从Windows的cmd提示符创build包含字节F4的文件a.com,x86 halt指令:

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

 $ 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 

Perl的

 die 
 死在testing线1。 

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

Commodore 64 BASIC:

 poke 2,2:sys2 

或更短(使用PETSCIIgraphics字符快捷键):

 pO2,2:sY2 

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

 lda #$02 sta $02 jmp $0002 

如果您在拥有TI-89的电脑商店,可以通过input以下内容来使其崩溃:

 Exec "00000000" 

(这是8个零)

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

如果你想有更多的乐趣,请这样做:

 Exec "4E4A4E750000" 

这将启动隐藏硬件testing菜单,包括内存testing,LCDtesting(绘制棋盘等)等等。 不幸的是,状态栏被擦除,calc的操作系统中没有任何东西将其拖回,因此要自行清理,按照上述说明进行重置,或者执行以下操作:

 Exec "307C56E670FF20C020C020C020C020C04E750000" 

Brainf * CK

5个字符

 +[>+] 

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

因素(或第四)

“数据堆栈下溢”

怎么样的java Z ? 如果没有文件存在,则会使用java.lang.NoClassDefFoundError “崩溃”。 所以我的答案是零字母。 如果那是无效的,那么……

 class T{} 

在线程“main”java.lang.NoSuchMethodError:main中将会“崩溃”$ java T Exception

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

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

其他

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

引用这个答案 :

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

 1 

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

编辑:我想我需要解释这一个。 1操作数将1推到Befunge的内部堆栈上,而其他任何东西都不会在语言规则下循环。

使用所提供的解释器,您最终将会 – 也就是说最终 – 碰到一个点,代表Befunge堆栈的Javascript数组变得太大而无法重新分配浏览器。 如果你有一个简单的Befunge解释器,它有一个更小的和有界的堆栈 – 就像大多数下面的语言一样 – 这个程序会更快地引起更明显的溢出。

在C中,20个字符:

 void main(){main();} 

更新:由Roe推荐,15个字符:

 main(){main();} 

注意:用VC ++ 2008testing。

晚了,但无论如何。 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); 

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

 Z(); 

将是最小的解决scheme。

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

 for(;;); 

我原来的那个在for循环的第三个expression式中有一个$i++ ,但是因为PHP将所有整数视为有符号的,而不是溢出,它只是负面的。

在汇编中试试这个:

 push 0 ret 

当然加上其他的垃圾编译成应用程序。

在Windows PowerShell中:

 throw 

Perl只有2个字符。

 &a 
 未定义的子程序&main :: a在test.pl第1行调用。 

scheme:

 (1) 

填充文本使这个更长。

在QBasic:

 ? 1/0 

(至less我认为它会继续编译,然后以零分的方式崩溃;这已经有一段时间了…)

在C中,33个字符:

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

Golfscript – 1个字符

很多运营商可以做到这一点,例如

 * 
 (eval):1:在`initialize'中:未定义的方法`class_id'为nil:NilClass(NoMethodError)
从../golfscript.rb:285:在`call'
从../golfscript.rb:285:在'去'
 from(eval):1:在`initialize'
从../golfscript.rb:285:在`call'
从../golfscript.rb:285:在'去'
从../golfscript.rb:477
 main = undefined 

在Haskell。

F#3个字符

1/0

是否编译,虽然给出警告。

Lua,3个字符

除以零并不会导致Lua中的问题,但是这里的内容同样简短:

 a() 

得到:

 lua:isort.lua:1:尝试调用全局“a”(一个零值)
堆栈追溯:
     a.lua:1:主要区块
     [C]: ?

F#,11个字符

 box 0 :?> unit 

编译没有警告。 崩溃:System.InvalidCastException:无法强制types为“System.Int32”的对象键入“Microsoft.FSharp.Core.Unit”。

PostScript,1个字符

像GolfScript一样:

 * 

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

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

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

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

Perl的

3个字符

 1/0 

生产:

 Illegal division by zero at crash.pl line 1. 

(仍然在寻找将在两个这样做的东西..)