Swift AccelerateライブラリのvDSP_ctoz
を使用して、インターリーブされたDSPComplex
ベクタをDSPSplitComplex
ベクタに変換しようとしています。以下のコードの最後の行でエラーが発生するSegmentation fault: 11
Swift Accelerateを使用したセグメンテーションエラーvDSP_ctoz
大きなベクトルを割り当てたときにvDSP_ctoz
がアウトオブバウンドメモリにアクセスしようとする理由がわかりません。少数の要素を処理しようとしています。ベクトルはvDSP_ctoz
にサイズ2048とN
の引数(プロセスへの要素の数)ですvDSP_ctoz
を呼び出すときに、私はまた、無駄に、異なるストライドとN
値を使用してみました。1.
です。
// 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
)