当我使用for-in循环时,为什么Swift 2.0 app会抛出EXC_BAD_INSTRUCTION?

时间:2015-11-28 19:23:31

标签: ios swift compiler-errors

我试图使用Swift 2.0来解决欧拉问题#2,这是为了找到400万以下的斐波纳契序列中所有偶数的sume。当我尝试迭代到400万Xcode时抛出错误"执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

var num1 = 0
var num2 = 1
var sum = 0
var evenSum = 0
var max = 4000000

for i in (1...max){
    print(i)
    sum = num1 + num2 //ERROR HERE!
    num1 = num2
    num2 = sum
    if((sum % 2) == 0){
        print(sum)
        evenSum += sum
    }
}
print("\(evenSum)",terminator:"")

Error Snapshot

1 个答案:

答案 0 :(得分:2)

因为存在整数溢出。总和太大了。当发生这种情况时,Swift 故意会使程序崩溃,这与其他获得垃圾结果的语言不同。

使用Int64作为变量类型可以进一步获得一点,但不多。

顺便说一句。再次仔细阅读欧拉问题陈述。你的程序没有计算欧拉问题#2要求的内容。