Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift中的Realloc UNSAFEMEUTABLEPOINTER导致错误_Swift_Unsafemutablepointer - Fatal编程技术网

Swift中的Realloc UNSAFEMEUTABLEPOINTER导致错误

Swift中的Realloc UNSAFEMEUTABLEPOINTER导致错误,swift,unsafemutablepointer,Swift,Unsafemutablepointer,我正在将一些关于C指针的操作转换为Swift var bits = UnsafeMutableBufferPointer<Int32>(start: nil, count: 0) var startIdx: UnsafeMutablePointer<Int32> = nil { didSet { bits = UnsafeMutableBufferPointer<Int32>(start: startIdx, count: bitsL

我正在将一些关于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
    }
}
var bits=unsafemeutablebufferpointer(开始:nil,计数:0)
var startIdx:unsafemeutablepointer=nil{
迪塞特{
位=不可配置的缓冲指针(开始:startIdx,计数:位长度)
延迟{bits.baseAddress.dealloc(bits.count)}
}
}
变量大小:Int=0
变量位长度:Int=1
初始化(大小:Int){
self.size=大小
self.bitsLength=(大小+31)/32
self.startIdx=unsafemeutablepointer.alloc(位长度*sizeof(Int32))
}
函数容量(大小:Int){
如果大小>位长度*32{
设newBitsLength=(大小+31)/32
startIdx=realloc(startIdx,sizeof(Int32)*newBitsLength)
//无法在强制中将“Unsafemtablepointer”类型的值转换为“Unsafemtablepointer”(也称为“Unsafemtablepointer”)类型
}
}
我知道了

无法在强制中将类型为
UnsafeMutablePointer
的值转换为类型为“UnsafeMutablePointer”(也称为
UnsafeMutablePointer
)的值

有什么想法吗?

这有助于:

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