代码 – 高尔夫:编译和崩溃的最短程序是什么?
这有点儿乐趣 你能制定最短的程序,编译但是什么都不做,但是执行时立即崩溃吗? 因此,“崩溃”是指程序停止时出现错误情况(例如核心转储)。
有一种语言崩溃比C使用gcc编译器更快(7个字符)? [我留下这个答案让别人find。]
(应该可以使用编译器标志,否则7现在不行,编译器检查好多了。)
[评估结果]我无法标记一个单一的答案,因为有多个正确的多种语言。 将一个答案取消给另一个答案是不公平的。 请用选票select最佳答案。
巴 – 我可以在5个字符中崩溃C:
main;
这声明了一个名为“main”的隐式int
variables。 这是全局性的,所以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.
(仍然在寻找将在两个这样做的东西..)