以前工作的代码现在收到错误:
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