【问题标题】:Realloc UnsafeMutablePointer in Swift cause errorSwift 中的 Realloc UnsafeMutablePointer 导致错误
【发布时间】:2016-04-13 02:15:33
【问题描述】:

我正在将一些关于 C 指针的操作转换为 Swift。

var bits = UnsafeMutableBufferPointer<Int32>(start: nil, count: 0)

var startIdx: UnsafeMutablePointer<Int32> = nil {
    didSet {
        bits = UnsafeMutableBufferPointer<Int32>(start: startIdx, count: bitsLength)
        defer { bits.baseAddress.dealloc(bits.count) }
    }
}

var size: Int = 0
var bitsLength: Int = 1

init(size: Int) {
    self.size = size
    self.bitsLength = (size + 31) / 32
    self.startIdx = UnsafeMutablePointer<Int32>.alloc(bitsLength * sizeof(Int32))
}

func ensureCapacity(size: Int) {
    if size > bitsLength * 32 {
        let newBitsLength = (size + 31) / 32

        startIdx = realloc(startIdx, sizeof(Int32) * newBitsLength) 
        // Cannot convert value of type `UnsafeMutablePointer<Int32>` to type 'UnsafeMutablePointer<Void>'(aka `UnsafeMutablePointer<()>`) in coercion
    }
}

我知道了

无法将UnsafeMutablePointer&lt;Int32&gt; 类型的值强制转换为类型“UnsafeMutablePointer”(又名UnsafeMutablePointer&lt;()&gt;

有什么想法吗?

【问题讨论】:

    标签: swift unsafemutablepointer


    【解决方案1】:

    这能帮上忙吗:

    startIdx = unsafeBitCast(realloc(startIdx, sizeof(Int32) * newBitsLength), UnsafeMutablePointer<Int32>.self)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多