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

Don*_*ohe 41 programming-languages code-golf

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

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

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

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

Aar*_*ron 128

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

main;
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 如果你在valgrind下运行它会更有趣:`valgrind:'不可能'发生了:...` (7认同)

Joh*_*itb 67

0角色崩溃:

$ > golf.c
$ gcc -Wl,--defsym=main=0 golf.c
$ ./a.out
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

  • Pssh,使用特殊的编译器标志应该包含在字符数中.=] (20认同)
  • 我做了帖子作为一个例子,命令行可以做任何想做的事情(包括制作一个shell命令,将代码附加到一个空文件中,并声明shell命令作为编译器).我认为应该有一个更精确的规则集来解决这个问题. (4认同)
  • 可悲的是,你仍然没有:命令行开关计算你的笔画.:) (2认同)

Vil*_*lx- 49

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

a
Run Code Online (Sandbox Code Playgroud)

这是JavaScript.这给出了"找不到对象" 的运行时错误.由于JavaScript是一种动态语言,从语法上讲这实际上是正确的.仍然感觉像扭曲规则.:P

  • @roe:IIRC,分号用作Javascript中语句之间的分隔符,因此在最后一个语句之后不需要分号. (4认同)
  • 实际上,分号在JavaScript中是完全可选的.亲自尝试一下!是的 - 我想这可能适用于各种动态脚本语言.我只是不熟悉任何其他人. (3认同)

Adr*_*son 47

使用python:

1/0
Run Code Online (Sandbox Code Playgroud)

  • 阅读Vilx答案,我想到了更好的东西:`a`会因NameError而崩溃. (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

NTVDM CPU遇到了非法指令


Dig*_*oss 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
Run Code Online (Sandbox Code Playgroud)


Bra*_*ert 23

Perl的

die
Run Code Online (Sandbox Code Playgroud)
Died at test line 1.

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

  • 我见过的第一个问题是Perl具有最易读的解决方案. (68认同)
  • 当所有程序崩溃时也是如此......这只是更加直截了当. (10认同)
  • 这不仅会像要求的那样崩溃,而且也是最具可读性的. (4认同)

Her*_*nán 11

Commodore 64 BASIC:

poke 2,2:sys2
Run Code Online (Sandbox Code Playgroud)

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

pO2,2:sY2
Run Code Online (Sandbox Code Playgroud)

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

lda #$02
sta $02
jmp $0002
Run Code Online (Sandbox Code Playgroud)

  • Commodore 64基本+1.我会给你更多的唉堆栈溢出不让我. (2认同)

Joe*_*ams 11

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

Exec "00000000"
Run Code Online (Sandbox Code Playgroud)

(那是8个零)

它将产生"非法指令".按2nd + Left + Right + ON重置calc.

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

Exec "4E4A4E750000"
Run Code Online (Sandbox Code Playgroud)

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

Exec "307C56E670FF20C020C020C020C020C04E750000"
Run Code Online (Sandbox Code Playgroud)

  • 你可以通过`Exec`ing几乎任何无效的东西来崩溃它. (2认同)

Mar*_*off 10

Brainf*CK

5个字符

+[>+]
Run Code Online (Sandbox Code Playgroud)

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

  • 那些不是图灵完整的.那里的乐趣在哪里? (3认同)

ben*_*din 8

因素(或第四)

.

"数据堆栈下溢"


Mic*_*mlk 7

怎么样java Z?如果没有文件存在,它将"崩溃" java.lang.NoClassDefFoundError.所以我的回答是零信.如果那是无效的话......

class T{}
Run Code Online (Sandbox Code Playgroud)

将在线程"main"java.lang.NoSuchMethodError:main中使用$ java T Exception"崩溃"

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

class T{static {int i =1/0;}}
Run Code Online (Sandbox Code Playgroud)

其他

class T{public static void main(String[]a){main(a);}}
Run Code Online (Sandbox Code Playgroud)


RCI*_*CIX 7

引用这个答案:

所有这些答案都没有Befunge?我打赌相当多,这是他们所有人的最短解决方案:

1
Run Code Online (Sandbox Code Playgroud)

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

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

使用提供的解释器,你最终 - 我的意思是最终 - 达到了一个点,其中代表Befunge堆栈的Javascript数组变得太大而浏览器无法重新分配.如果你有一个简单的Befunge解释器,它有一个较小的有限堆栈 - 就像下面大多数语言一样 - 这个程序会更快地引起更明显的溢出.


spo*_*son 6

在C中,20个字符:

void main(){main();}
Run Code Online (Sandbox Code Playgroud)

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

main(){main();}
Run Code Online (Sandbox Code Playgroud)

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

  • 所以,即使根据标准无效,问题是什么?它*编译*和*崩溃*. (6认同)
  • "`main(){return main();}`"是的. (4认同)
  • 根据标准无效:-) (2认同)
  • @paxdiablo:没有'标准'有C99标准和C89标准(以及其他一些标准).`x(){...}`对于早期C标准中的`int x(void){...}`完全有效.所以它在该标准下是有效的C. (2认同)

Der*_*sed 5

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

$r=function($z){$z($z);};$r($r);
Run Code Online (Sandbox Code Playgroud)

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

从技术上讲,我也可以在29岁时完成

$r=function($z){$z();};$r(0);
Run Code Online (Sandbox Code Playgroud)

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

Z();
Run Code Online (Sandbox Code Playgroud)

将是最小的解决方案.

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

for(;;);
Run Code Online (Sandbox Code Playgroud)

我的原始$i++内容在for循环的第三个表达式中有一个,但是因为PHP将所有整数视为有符号,而不是溢出,它只是消极.


pax*_*blo 3

在 C 语言中,33 个字符:

int main(void){return*((int*)0);}
Run Code Online (Sandbox Code Playgroud)