我正在尝试在 Swift 4 中运行 swix
。我已经解决了最初出现的大部分问题,但还有一个我不太了解如何解决。这是同一个错误的三个实例,请参阅下面的代码
var nc = __CLPK_integer(N)
dgetrf_(&nc, &nc, !y, &nc, &ipiv, &info)
Overlapping accesses to 'nc', but modification requires exclusive access; consider copying to a local variable
关于如何解决这个问题有什么想法吗?
最佳答案
这是 SE-0176 Enforce Exclusive Access to Memory 的结果,在 Swift 4 中实现:
__m
, __n
, 和 __lda
dgetrf_()
的参数有类型
UnsafeMutablePointer<>
,即使指向的变量没有发生变化(但编译器不知道!)和
你传递相同变量的地址 nc
给他们三个。
有两种可能的解决方案: 额外的变量副本:
var nc1 = nc, nc2 = nc
dgetrf_(&nc, &nc1, &matrix, &nc2, &ipiv, &info)
或withUnsafeMutablePointer
,因为不安全指针不使用任何主动执行:
withUnsafeMutablePointer(to: &nc) {
dgetrf_($0, $0, &matrix, $0, &ipiv, &info)
}
关于swift - 重叠访问指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114737/