更新到卡特琳娜 - 斯威夫特后的 simd 错误



以前工作的代码现在收到错误:

var row1 = simd_double3(x:CV1.x, y: CV1.y, z:CV1.z)
var row2 = simd_double3(x:CV2.x, y: CV2.y, z:CV2.z)
var row3 = simd_double3(x:self.n.x, y: self.n.y, z:self.n.z)
var m:simd_double3x3 = simd_double3x3(rows: [row1, row2, row3])
self.majorInvMatrix = m.inverse

m.逆得到的分配

EXC_BAD_ACCESS(代码=EXC_1386GPFLT(

将其更改为

let zz = m.inverse

仍然给出错误,但是如果我在分配之前中断代码并在控制台中查看m.inverse则没有问题。

如果我在行中添加var a = 2则没有问题(它不适用于let a = 2(

var row1 = simd_double3(x:CV1.x, y: CV1.y, z:CV1.z)
var row2 = simd_double3(x:CV2.x, y: CV2.y, z:CV2.z)
var row3 = simd_double3(x:self.n.x, y: self.n.y, z:self.n.z)
var m:simd_double3x3 = simd_double3x3(rows: [row1, row2, row3])
var a = 2
self.majorInvMatrix = m.inverse

这是一个操作系统错误,或者更确切地说是一个操作系统库错误。简单来说,编译器和 SIMD 库在内存中应如何对齐simd_double3x3方面存在分歧。

您的var a = 2会更改堆栈上事物的对齐方式,这就是它工作的原因(在您的情况下 - 不幸的是,不是我的(。

该问题将在 10.15.4 中修复。

有关此线程的完整详细信息:

https://forums.developer.apple.com/thread/127976

最新更新