我正在尝试访问SCNGeometrySource
内容。检查源之后,我可以告诉你:
source.bytesPerComponent = 4
source.componentsPerVector = 3
source.dataStride = 16
source.dataOffset = 0
source.vectorCount = 98304
换句话说,我有{3个98304
的float3向量。
但是,打电话时
source.data.withUnsafeBytes { (pointer: UnsafePointer<float3>) in
for i in 0..<source.vectorCount {
print((pointer + i).pointee)
}
}
第一个打印的元素看起来不错,但是到了最后,我得到了奇怪的值,当它们不应该接近零时,不时崩溃,并且内存清理程序确实检测到堆溢出。
即使我似乎以正确的方式访问所有内容,我也不知道如何引起堆溢出。
我应该怎么做才能找出导致此问题的原因?
编辑(部分解决方案):
就我而言,我有一个自定义几何图形,并使用了SCNGeometrySource(vertices: [SCNVector3])
初始化程序。据我所知,似乎有一个错误导致对source.data
返回值的错误分配。解决此问题的方法是不再使用SCNGeometrySource(vertices: [SCNVector3])
初始化程序,而使用SCNGeometrySource(data: ...)
初始化程序。这为我解决了这个问题。
答案 0 :(得分:0)
您怎么称呼Float3
?是SIMD类型float3
吗?在这种情况下,跨度为16,而不是12(SIMD类型按4个字节对齐)。
print(MemoryLayout<float3>.stride) // 16