这有点有趣。你能设计出最短的程序,它可以编译,但在执行时会立即崩溃?因此,“崩溃”是指程序因错误情况而停止(例如核心转储)。
使用 gcc 编译器,有没有一种语言比 C 崩溃得更快(7 个字符)?[我把这个答案留给别人找。]
(应该允许使用编译器标志。否则现在 7 将无法工作,编译器检查变得更好。)
[结果评估] 我无法标记一个答案,因为多种语言有多个正确答案。取消一个答案的资格是不公平的。请使用投票来选择最佳答案。
这有点有趣。你能设计出最短的程序,它可以编译,但在执行时会立即崩溃?因此,“崩溃”是指程序因错误情况而停止(例如核心转储)。
使用 gcc 编译器,有没有一种语言比 C 崩溃得更快(7 个字符)?[我把这个答案留给别人找。]
(应该允许使用编译器标志。否则现在 7 将无法工作,编译器检查变得更好。)
[结果评估] 我无法标记一个答案,因为多种语言有多个正确答案。取消一个答案的资格是不公平的。请使用投票来选择最佳答案。
呸——我可以用 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)
$
0
与字符崩溃:
$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault
请问这个算不算...
a
这是在 JavaScript 中。这给出了“找不到对象”的运行时错误。由于 JavaScript 是一种动态语言,因此在语法上这实际上是正确的。仍然感觉像是在扭曲规则。:P
使用蟒蛇:
1/0
从 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 遇到非法指令
$ 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
Commodore 64 基本款:
poke 2,2:sys2
或更短(使用 PETSCII 图形字符快捷方式):
pO2,2:sY2
(崩溃:MOS/CSG6510 上的 02 美元操作码无效)。实际上它可以在 7 个字节(3 条指令)中完成:
lda #$02
sta $02
jmp $0002
如果您在有 TI-89 的计算机商店,您可以通过输入以下内容来崩溃:
Exec "00000000"
(那是 8 个零)
它将产生“非法指令”。按 2nd+Left+Right+ON 重置计算。
如果您想玩得更开心,请执行以下操作:
Exec "4E4A4E750000"
这会启动隐藏的硬件测试菜单,包括内存测试、LCD 测试(绘制棋盘等)等等。不幸的是,状态栏被删除了,并且 calc 的操作系统中没有任何内容将其拉回,所以要自己清理,按照上面的说明重置,或者执行以下操作:
Exec "307C56E670FF20C020C020C020C020C04E750000"
+[>+]
这需要一段时间,但最终程序会耗尽内存并不可避免地崩溃。
.
“数据堆栈下溢”
怎么样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);}}
引用这个答案:
所有这些答案,没有Befunge?我敢打赌,这是所有解决方案中最短的:
1
不开玩笑。自己试试吧: http ://www.quirkster.com/js/befunge.html
编辑:我想我需要解释一下。操作数 1 将 1 推入 Befunge 的内部堆栈,并且没有其他任何内容将其置于语言规则下的循环中。
使用提供的解释器,您最终会(我的意思是最终)遇到表示 Befunge 堆栈的 Javascript 数组变得太大而浏览器无法重新分配的点。如果你有一个简单的 Befunge 解释器,它的堆栈更小且有界——就像下面大多数语言的情况一样——这个程序会更快地导致更明显的溢出。
在 C 中,20 个字符:
void main(){main();}
更新:由 roe 建议,15 个字符:
main(){main();}
注意:使用 VC++ 2008 测试。
晚了,但无论如何。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 将所有整数都视为有符号的,而不是溢出,它只是变成负数。
在汇编中试试这个:
push 0
ret
当然,添加所有其他垃圾以编译到应用程序中。
&a
未定义的子例程 &main::a 在 test.pl 第 1 行调用。
在 Windows PowerShell 中:
throw
方案:
(1)
填充文本以使其更长。
在 C 中,33 个字符:
int main(void){return*((int*)0);}
在 QBasic 中:
? 1/0
(至少我认为它仍然会编译然后被零除崩溃;已经有一段时间了......)
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
main = undefined
在哈斯克尔。
box 0 :?> unit
编译没有警告。崩溃:System.InvalidCastException:无法将“System.Int32”类型的对象转换为“Microsoft.FSharp.Core.Unit”类型。
像 GolfScript:
*
语法上合法,但在运行时崩溃,因为*
未定义令牌(与 GolfScript 崩溃的原因不同)。
除以零不会在 Lua 中引起问题,但这里的内容也很短:
a()
lua: isort.lua:1: 尝试调用全局 'a' (一个 nil 值) 堆栈回溯: a.lua:1: 在主块中 [C]: ?
1/0
可以编译,但会发出警告。
int main () { int n = 0; return 1 / n; }
它取决于线程允许的最大堆栈大小。但是使用 VC9 编译时确实会崩溃:
int main()
{
int a[10000000];
return 0;
};
C#,37 个字符
class F{static void Main(){Main();}}
爆炸堆栈。
速度 RCIX,从最短程序溢出堆栈的几个答案导致堆栈溢出的最短代码是什么?也适用;最短的是 befunge 程序:
1
golfscript http://www.golfscript.com/似乎在这方面很糟糕:我认为会有一个单字符的堆栈下溢或堆栈溢出,但它似乎设计为不会崩溃。希望更了解该语言的人会填写更多详细信息。
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
1/0
产生:
Illegal division by zero at crash.pl line 1.
(仍在寻找可以一分为二的东西..)
时髦的 3 个字符
1/0
生产
java.lang.ArithmeticException: / 由零
mov al, [0]
$ nasm -f elf64 -o crash.o crash.asm
$ ld -o crash crash.o
$ ./crash