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 ..< 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 错误 - 文件“日志”无法保存在文件夹“库”中