Я пытаюсь написать метод для изменения размера изображения, захваченного в Swift, но в моем функциональном цикле (который захватывает кадры в реальном времени) я получил ошибку, которая произошла после нескольких секунд захвата. Я понял, что не освобождаю память, поэтому я добавил для этого операторы отсрочки, но эти операторы отсрочки выдают ошибки malloc, указывающие, что я не выделил память, но я думаю, что правильно выделил память. Таким образом, я не могу освободить память, которую я выделяю.
Я пытался добавить операторы CVPixelBuffer (Un) LockBaseAddress, но это ничего не дало.
private func resizePixelBuffer(imageBuffer: CVPixelBuffer, scaleWidth: Int, scaleHeight: Int) -> CVPixelBuffer? {
CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
guard let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer) else {return nil}
let bytes_per_row = CVPixelBufferGetBytesPerRow(imageBuffer)
let width = CVPixelBufferGetWidth(imageBuffer)
let height = CVPixelBufferGetHeight(imageBuffer)
// Allocate input buffer
var inBuff = vImage_Buffer(data: baseAddress, height: vImagePixelCount(height), width: vImagePixelCount(width), rowBytes: bytes_per_row)
defer { free(inBuff.data) } // ADDED
// Allocate output container
let outData = UnsafeMutablePointer<UInt8>.allocate(capacity: 4*scaleWidth*scaleHeight)
defer { outData.deallocate() } // ADDED
// Assign output buffer
var outBuff = vImage_Buffer(data: outData, height: vImagePixelCount(scaleHeight), width: vImagePixelCount(scaleWidth), rowBytes: 4*scaleWidth)
defer { free(outBuff.data) } // ADDED
let releaseCallback: CVPixelBufferReleaseBytesCallback = {_, ptr in
if let ptr = ptr {
free(UnsafeMutableRawPointer(mutating: ptr))
}
}
// Assign output data
let error = vImageScale_ARGB8888(&inBuff, &outBuff, nil, vImage_Flags(kvImageHighQualityResampling))
guard error == kvImageNoError else {return nil}
CVPixelBufferUnlockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0))
...
}
python-ios-integration(2477,0x16cf5f000) malloc: *** error for object 0x10e84c000: pointer being freed was not allocated; python-ios-integration(2477,0x16cf5f000) malloc: *** set a breakpoint in malloc_error_break to debug