意外外观但导致崩溃的错误[关闭]


19

关于这个概念有很多问题,但是这些问题似乎都只是导致崩溃,导致产生了很多很显然是导致崩溃的答案。因此,我所面临的挑战是编写一些似乎合理的代码(尽管我认为代码应该由您自己承担)会导致整个目标操作系统崩溃,或者使自身崩溃,而这并不是立即显而易见的。(我认识到“立即显而易见”是主观的,但希望所面临的挑战仍然是合理的)。

获胜者是5天后获得最多票数的答案。


删除了标签代码挑战,因为没有给出客观标准。
2014年

2
在我的实际代码中出现了太多此类情况。我不记得他们中的任何一个。
Joe Z. 2014年

相关内容:偷袭的C竞赛有很多目标相似的问题,以及一些非常聪明的解决方案。
FireFly 2014年

1
我投票结束这个问题是不合时宜的,因为在这个网站上,不熟练的挑战已不再是正题。meta.codegolf.stackexchange.com/a/8326/20469
cat,

Answers:


30

C,Linux。如果以超级用户身份运行,将导致系统崩溃

/* Fork child process, wait 5 seconds and kill it */
pid_t pid = fork();
if(pid =! 0) {
    /* Parent */
    sleep(5);
    kill(pid, 11);
}
else {
    /* Child process. Would contain some code */
}

通过更改!==!,将一个无辜的比较转换为一个分配。鉴于pid 1是init,并且杀死init会导致内核崩溃,所以这不是您希望以root身份运行的代码:)


1
init忽略SIGKILL,要使内核出现恐慌,您必须将其发送给SIGSEGV,信号11
MultiplyByZer0

1
啊,老鼠 编辑更改,但这使它不那么引人注目。SIGTERM也会工作吗?
丹尼斯·卡斯梅克


3
我会SIGSEGV使用数字代码隐藏。毕竟,这可能是一个错误。
Konrad Borowski14年

我喜欢这个想法,编辑过:)
Dennis Kaarsemaker,2014年

27

C#

让我们初始化一个字节列表,每个字节值从0到255。

List<byte> bytes = new List<byte>();
for (byte i = 0; i <= 255; i++)
{
    bytes.Add(i);
}

内存不足?我清楚地记得安装了超过256个字节...

扰流板:

一个字节将始终小于或等于255。加法运算从255绕到0。


3
这花了我多长时间才应该弄清楚
Hannesh 2014年

C#编译器是否会警告您,您正在使用bhg bs obhaqf?(rot13不会破坏谜语)
Dennis Kaarsemaker 2014年

@Dennis可能不是,因为lbh pna pbzcner qvssrerag ahzrevp glcrf jvgubhg reebe / jneavat,naq gur pbafgnag va dhrfgvba vf和inyvq vag。
wchargin 2014年

2
@DennisKaarsemaker如果lbh hfr'yrff-guna gjb svsgl fvk'会警告您,这就是为什么我没有这样做。虽然这里没有警告。
Kendall Frey 2014年

2
这是一个解码器/编码器str.toLowerCase().split('').map(function(c) { return c < 'a' || c > 'z' ? c : String.fromCharCode(((c.charCodeAt(0) - 'a'.charCodeAt(0) + 13) % 26) + 'a'.charCodeAt(0)); }).join('')
MosheK,2014年

7

C

#include <stdio.h>

int main(void) {
   fputs(stdout, "Hello, world!\n");
   return 0;
}

(编译器警告将放弃它。)


3

的JavaScript

var arr = [3,6,1,54,2,-4,8,10,3,7]
function qs(a) {
    if (a.length < 2) return a
    var part = a.shift()
    var higher = [], lower = []
    for (var i = 0; i < a.length; i ++) {
        var x = a[i] // *** THIS LINE ***
        (x < part ? lower : higher).push(x)
 }
    return qs(lower).concat([part]).concat(qs(higher))
}
alert(qs(arr))

快速排序工作正常,除了以下事实之外:我在标有注释的行上缺少分号会导致它解析错误并崩溃。

在该行的末尾添加分号即可解决该问题。


0

C ++

输入名称并将其存储在向量中。输入标志值时打印名称。询问用户是否想到了更多名称;如果是这样,请输入名称。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void print(const vector<string>& v) {

  for (int i = 0; i <= names.size(); i++)
    cout << v[i] << endl;
}

void input(vector<string>& v) {

  string tmp;

  cout << "Enter a list of names seperated by returns: ";

  do {
    getline(cin, tmp);

    if (tmp != "-1")
      v.push_back(tmp);

  } while (tmp != "-1");

  print(v);
}

int main() {

  vector<string> names;

  string tmp;

  do {
    input(names);

    cout << "Do you have any more names to input (y or n)? ";
    cin >> tmp;

  } while (tmp == "y");

  return 0;
}

对于非C ++,Java和C用户,错误在print()s for语句中。应该是for (int i = 0; i < names.size(); i++)。这是一个容易犯且容易忽略的错误(直到得到编译器消息),因为它只有1个字符,并且有时在for循环中需要> =运算符。


Dunno在阅读之初就发现了它。也许print()以后在代码中放些地方会更好,这样读者在犯错误之前会有点累:)
Ruslan 2014年

0

GTB

:""→_[_+"+"→_]

因为[_+应为导致计算器崩溃["_"+,但由于不是,因此使计算器耗尽,可能会耗尽内存,可能会以错误的方式清除RAM。


3
["_"+看起来让我有些不高兴
corsiKa 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.