我試圖使用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
)