J'essaie de convertir un vecteur DSPComplex
entrelacé en un vecteur DSPSplitComplex
en utilisant vDSP_ctoz
à partir de la bibliothèque Swift Accelerate. Je ne comprends pas pourquoi vDSP_ctoz
essaye d'accéder à la mémoire hors-limite quand j'ai alloué de grands vecteurs et essaye seulement de traiter un petit nombre d'éléments . Les vecteurs sont de taille 2048 et l'argument pour N
(nombre d'éléments à traiter) dans vDSP_ctoz
est 1.Erreur de segmentation à l'aide de Swift Accelerate vDSP_ctoz
J'ai aussi essayé d'utiliser différents pas et N
valeurs lors de l'appel vDSP_ctoz
, en vain.
// 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
)