【问题标题】:Segmentation fault Xcode 11分段错误 Xcode 11
【发布时间】:2019-09-23 14:40:06
【问题描述】:

序列化'AnyArrayBox'时出现分段错误

  1. 在运行传递 #0 SILModuleTransform "SerializeSILPass" 时。
  2. 序列化“AnyArrayBox”时(在模块“Module”中) 0 迅速 0x000000010d7abeb3 PrintStackTraceSignalHandler(void*) + 51 1 迅速 0x000000010d7ab686 SignalHandler(int) + 358 2 libsystem_platform.dylib 0x00007fff76c31b5d _sigtramp + 29

这里是 AnyArray 结构

    struct AnyArray<Element>: RandomAccessCollection {

    typealias Index = Int

    private let box: AnyArrayBase<Element>

    init<Concrete: RandomAccessCollection>(_ concrete: Concrete) where Concrete.Element == Element, Concrete.Indices == Indices {
        box = AnyArrayBox(concrete)
    }

    var startIndex: Int { return box.startIndex }
    var endIndex: Int { return box.endIndex }

    func index(after i: Int) -> Int {
        return box.index(after: i)
    }

    subscript(position: Index) -> Element {
        return box[position]
    }

}

还有另外两个在那里使用的

private class AnyArrayBase<Element>: RandomAccessCollection {

    init() {
        guard type(of: self) != AnyArrayBase.self else {
            fatalError("_AnyArrayBase<Element> is an abstract class, it can not be created; create subclass instance instead")
        }
    }

    typealias Index = Int

    var startIndex: Int { fatalError("Must override") }
    var endIndex: Int { fatalError("Must override") }

    func index(after i: Int) -> Int {
        fatalError("Must override")
    }

    subscript(position: Index) -> Element {
        fatalError("Must override")
    }

}

private final class AnyArrayBox<Concrete: RandomAccessCollection>: AnyArrayBase<Concrete.Element> where Concrete.Indices == AnyArrayBase<Concrete.Element>.Indices {

    private let concrete: Concrete

    init(_ concrete: Concrete) {
        self.concrete = concrete
    }

    override var startIndex: Int { return concrete.startIndex }
    override var endIndex: Int { return concrete.endIndex }

    override func index(after i: Int) -> Int {
        return concrete.index(after: i)
    }

    override subscript(position: Index) -> Element {
        return concrete[position]
    }

}

我该如何解决?有什么建议吗?

【问题讨论】:

  • 我在迁移到 Xcode 11.0 (11A420a) 后出现了同样的问题,在我的情况下,它出现在一个简单的结构中。它指向这条线:var dim_values : (dim1:String?,dim2:String?,dim3:String?)
  • 将上面的 dim_values 元组更改为结构解决了我的问题
  • @XFawkes 这对我也有帮助,谢谢!

标签: swift xcode xcode11


【解决方案1】:

这行得通

var dim_values : (dim1:String?,dim2:String?,dim3:String?) = (nil, nil, nil)

显然编译器需要显式初始化(​​为零)

【讨论】:

    【解决方案2】:

    我在迁移到 Xcode 11.0 (11A420a) 时遇到了同样的问题 它指向我将元组作为结构一部分的一行:

    var dim_values : (dim1:String?,dim2:String?,dim3:String?) 
    

    我已将其更改为另一个结构并解决了问题。

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多