我正在尝试使用Swift Accelerate 库将交错DSPComplex
向量转换为向量。下面代码的最后一行产生错误DSPSplitComplex
vDSP_ctoz
Segmentation fault: 11
我不明白vDSP_ctoz
当我分配了大向量并且只尝试处理少量元素时,为什么会尝试访问越界内存。向量的大小为 2048,N
(要处理的元素数量)的参数为vDSP_ctoz
1。
我也尝试N
在调用时使用不同的步幅和值vDSP_ctoz
,但无济于事。
// set stride values
let dspComplexStride = MemoryLayout<DSPComplex>.stride
let dspSplitComplexStride = MemoryLayout<DSPSplitComplex>.stride
// make interleaved vector
var interleaved = UnsafeMutablePointer<DSPComplex>.allocate(capacity: 2048)
for index in 0..<16 {
interleaved[index] = DSPComplex(real: Float(2*index), imag: Float(2*index+1))
}
// make split vector
var splitComplex = UnsafeMutablePointer<DSPSplitComplex>.allocate(capacity: 2048)
vDSP_ctoz(
interleaved, dspComplexStride, splitComplex, dspSplitComplexStride, 1
)