Swift Playground 错误:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

Posted

技术标签:

【中文标题】Swift Playground 错误:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)【英文标题】:Swift Playground Error: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 【发布时间】:2015-11-28 04:28:45 【问题描述】:

在 Playground Xcode 7.1.1 中使用以下代码出现上述错误:

import Cocoa

func countDivisors(number:Int) -> Int

    var c = 0
    for i in 1 ... number
    
        if number % i == 0  ++c 
    
    return c


func isPrime(number:Int) -> Bool

    return countDivisors(number) == 2


isPrime(2);

for i in 0 ..< 100

    var f:Bool = isPrime(i)
    print("\(i): \(f)")

错误发生就行了

var f:Bool = isPrime(i)

我已经重新安装了 Xcode,但仍然出现错误。有谁知道这背后的原因吗?

【问题讨论】:

侧节点:测试应该从 2 开始,当 i >= 数字的平方根时停止。当您测试数字 10,000 时,测试将在 1% 的时间后完成。 【参考方案1】:

你得到“EXC_BAD_INSTRUCTION”的原因是因为for循环的范围运算符不能形成一个结束值为0的范围。你的范围运算符的结束值应该大于或等于开始值。

来自苹果文档,

封闭范围运算符 (a...b) 定义从 a 到 b 的范围,并包括值 a 和 b。 a的值不能大于b。

这会起作用

for i in 1...1 
   //--  

但不是这个

for i in 1...0 
  //--  

【讨论】:

【参考方案2】:

当调用var f:Bool = isPrime(i) 行时,i 的初始值为0,除以零得到未知值。最好把你的循环改成for i in 1 ..&lt; 100

【讨论】:

问题是零,但不是因为除以零——请参阅下面的 RP 回答了解发生了什么。

以上是关于Swift Playground 错误:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift/Playground 中使用 .append 选项到数组结束时出现错误

在 Swift Playground 中创建 UIManagedDocument - 信号 SIGABRT 错误

Swift 2 Xcode 7.2.1 Playground 错误 - 文件“日志”无法保存在文件夹“库”中

如何修复 Swift Playground 中的“无法查找符号”错误

Swift Playground 无法在 iPad 上运行

Swift Playground 中的空类给出 __lldb_expr_ 错误