我试图使用Swift Accelerate库中的vDSP_ctoz
将交错的DSPComplex
向量转换为DSPSplitComplex
向量。下面的代码的最后一行产生错误Segmentation fault: 11
使用Swift Accelerate的分段错误vDSP_ctoz
我不明白为什么vDSP_ctoz
会尝试访问超出界限的内存时,我已经分配了大型向量,只是试图处理少量的元素。载体是大小2048和在vDSP_ctoz
为N
(数量的元件来处理的)的参数是1
我打电话vDSP_ctoz
时,没有效果使用不同的步幅和N
值也尝试。
// 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
)