iOS Swift - 某些设备上的 EXC_BAD_INSTRUCTION

标签 ios swift crash exc-bad-instruction

我是 Swift 和 iOS 开发的新手,但我遇到了一个错误,导致我的应用程序在以下设备上运行时崩溃:

iPhone 4S iphone 5 iPad 2 iPad 视网膜

这是被标记的代码:

// bin2dec - converts binary string into decimal string
func bin2dec(input: String) -> String {
    var counter = countElements(input)
    var digit: Character
    var power = 1
    var result = 0

    while counter > 0 {
        digit = input[advance(input.startIndex, counter-1)]

        switch digit {
        case "0":
            result += 0
        case "1":
            result += 1 * power
        default:
            power = power / 2
            break
        }
        counter--
        power *= 2
    }
    return "\(result)"
}

错误是:

Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)

任何帮助将不胜感激,谢谢!

最佳答案

iPhone 4S、iPhone 5、iPad 2、iPad Retina 是 32 位设备,其中 Int 是一个 32 位整数。因此从

开始
var power = 1

然后调用

power *= 2

32次会溢出导致异常。在 Swift 中,整数运算不会像在 (Objective-)C 中那样默默地“环绕”, 除非您明确使用“溢出运算符”&*&+

可能的解决方案:

  • 使用 Int64 而不是 Int
  • 避免 power 的最终乘法(其结果不是 需要)。

请注意,有更简单的方法可以将字符串转换为二进制 数字到数字,参见示例 How to convert a binary to decimal in Swift? .

关于iOS Swift - 某些设备上的 EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344663/

相关文章:

ios - Firebase Auth 链接提供商 Google 登录问题?

swift - 一个 View Controller 中的两个 TableView swift2.0 中带有 didSelectRowAtIndexPath

swift - 在部署目标 iOS 8 的 iOS 应用程序中使用聚光灯

swift - 图像和暗模式不切换

ios - 删除 UICollectionView 中的最后一个单元格会导致崩溃

ios - 将 UIImage 转换为 8-Gray 类型的像素缓冲区

ios - Swift Sprite 套件 : How do I make it so that iAd displays a new add after a certain time interval?

windows - window 崩溃的原因

ios - NewRelicAgent 框架在 NR_timeElapsedInMilliSeconds 内崩溃

ios - 添加照片到 MWPhotoBrowser