关于 Swift:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)
Posted
技术标签:
【中文标题】关于 Swift:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)【英文标题】:About Swift: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0) 【发布时间】:2015-01-03 20:37:51 【问题描述】:我刚刚学习编码,所以我决定从 Swift 开始。我正在关注 mac 在here 上为它提供的导览,我在它计算数字总和的部分,然后它告诉您尝试执行一个计算数字平均值的函数。
func averageOf(numbers: Int...) -> Int
var sum = 0
var total = 0
var average = 0
for number in numbers
sum += number
total++
**Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)**
average = sum/total
return average
我做错了什么(我需要学习什么才能做对)?
【问题讨论】:
【参考方案1】:我猜你是在没有参数的情况下调用了你的函数,也就是说:
averageOf()
允许使用可变参数,numbers
将是一个空数组。这将导致您尝试将不变的总和除以不变的总数(因为对于numbers
中的任何元素,您将不会循环循环),因此将0
除以0
,您将得到一个除零错误。
为防止出现这种情况,您可以要求用户至少提供一个号码:
func averageOf(first: Int, rest: Int...) -> Double
var sum = first
var total = 1.0
for number in rest
sum += number
total++
return Double(sum)/total
这样,如果你尝试不带参数调用它,你会得到一个编译器错误。
顺便说一句,我更改了您的版本以返回 Double
而不是 Int
,您可能想对这两个版本进行试验以了解原因。
(这种技术类似于标准库max
函数的声明方式,至少需要2个参数:
func max<T : Comparable>(x: T, y: T) -> T
但有 3 个或更多的重载版本:
func max<T : Comparable>(x: T, y: T, z: T, rest: T...) -> T
第一个版本的原因,而不是直接切割成至少需要两个存在的可变参数版本,然后您可以将其传递到 reduce
之类的东西中以查找集合中的最大值,例如reduce(a, 0, max)
)
【讨论】:
【参考方案2】:对我来说,发生此错误是因为未设置隐式展开的属性。设置它可以解决问题。
【讨论】:
以上是关于关于 Swift:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)的主要内容,如果未能解决你的问题,请参考以下文章
Swift JSONDecoder 解码错误:错误:执行被中断,原因:EXC_BAD_ACCESS (code=1, address=0x5e48)
Swift 扩展异常执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
错误:执行被中断,原因:断点 1.2。 Xcode 7.1,斯威夫特
快速添加:执行被中断,原因:EXC_BAD_INSTRUCTION (Code=EXC_l386_INVOP, subcode=0x0)
模糊的操场错误:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)