swift - 更新到 Catalina 后的 Simd 错误 - Swift
问题描述
以前工作的代码现在出现错误:
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.inverse 的分配得到
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 中修复。
此线程的完整详细信息:
推荐阅读
- c# - 在 CSharpCompilation .net Core 中没有获得命名空间/引用
- python - 如何有条件地从一个值中减去
- reactjs - firebase subquery and also head query in next js as getinitialprops
- android - 未读取 RecyclerView 单击事件中的上下文
- assembly - x86-64 访问数组的元素
- bash - Unix 脚本 - 除法
- django - 如何在同一个 dockerfile 中安装和配置 postgresql 和 django
- c++ - 如何配置 CMake/CMakeLists.txt 以链接通用共享库文件名而不是特定的
- css - scss 将样式应用于最后一个元素
- html - 如何保持一个在另一个的底部后面有滚动元素