【问题标题】:Swift Struct Warning "Initialization of 'UnsafeMutableRawPointer' results in a dangling pointer"Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”
【发布时间】:2020-10-14 16:17:51
【问题描述】:

我搜索了许多类似问题的答案,但找不到解决此问题的正确答案。我有一个非常简单的结构

  struct MyParameters {
    var position: CGPoint
    var size: Float
  }

然后这个初始化

 var parameters = MyParameters(position: .zero, size: 0)
 let pointer = UnsafeMutableRawPointer(&parameters)

我在第二行收到警告

 Initialization of 'UnsafeMutableRawPointer' results in a dangling pointer

我了解编译器在抱怨,因为它不确定指针指向的内存是否会继续存在。但是在这种情况下传递指针的正确方法是什么?

【问题讨论】:

    标签: ios swift struct swift4


    【解决方案1】:

    使用withUnsafeMutableBytes

    func foo() {
        var parameters = MyParameters(position: .zero, size: 0)
        
        withUnsafeMutableBytes(of: &parameters) { pointer in
             // here the lifetime is known
        }
    }
    

    【讨论】:

    • 但是当我使用指针时它给出了一个错误 - 无法将“UnsafeMutableRawBufferPointer”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”
    • 您需要访问pointer.baseAddress 才能获得原始指针
    猜你喜欢
    • 2020-07-06
    • 2020-07-06
    • 2020-10-18
    • 2020-08-02
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    相关资源
    最近更新 更多