美文网首页
unsafe swift

unsafe swift

作者: Ian_ | 来源:发表于2020-10-14 15:40 被阅读0次

下面这段代码, 安全分析:

  1. ptr 申请了一个 Int 长度的内存
  2. ptr 赋值 10 到这块内存中
  3. ptr 释放掉这块内存, 代表这块内存可以被重新 alloc
  4. 赋值20 到 ptr 指向的这块内存

到这里发现即使 ptr.deallocate() ptr 还会指向这块内存, 再 ptr.deallocate() 之后, 这部分代码就是隐藏的问题:
deallocate() 之后, 这块内存已经可以被重新 alloc, 但 ptr 依旧执行它, 并且赋值了20 到这块内存, 如果这块内存已经分配给其他 ptr1, 很大的问题出现了.

let ptr = UnsafeMutablePointer<Int>.allocate(capacity: 1)
ptr.initialize(to: 10)
print(ptr.pointee)
print(ptr)
ptr.deallocate()
ptr.pointee = 20
print(ptr.pointee)
print(ptr)

// print
10
0x00007fe9b9006470
20
0x00007fe9b9006470

Xcode 提供了 Address Sanitizer 来检测这个问题, 并且返回错误.
打开 Address Sanitizer方式:
Scheme >> Edit Scheme >> Diagnostics >> Address Sanitizer
打开它在运行后会看到错误:

Thread 1: Use of deallocated memory

所以在正确的时间释放 unsafe ptr 是非常重要的.

c 中的指针对应的 swift 中的指针


c <--> swift

相关文章

  • unsafe swift

    下面这段代码, 安全分析: ptr 申请了一个 Int 长度的内存 ptr 赋值 10 到这块内存中 ptr 释放...

  • Swift-06.指针(UnsafePointer)

    Swift中也有专门的指针类型,这些都被定性为“Unsafe”(不安全的)。 常见的有以下4种类型: Unsafe...

  • swift基础_指针

    一.swift指针类型 swift认为指针是不安全的,所有指针的类的前缀为unsafe UnsafePointer...

  • J.U.C之Unsafe: Unsafe 概述

    1 创建Unsafe Unsafe 对象不能直接通过 new Unsafe() 或调用 Unsafe.getUns...

  • J.U.C之Unsafe: Unsafe 创建和运用场景

    1 创建Unsafe Unsafe 对象不能直接通过 new Unsafe() 或调用 Unsafe.getUns...

  • Unsafe

    关于Unsafe 如何获取Unsafe实例 Unsafe.getUnsafe() @CallerSensit...

  • Swift5.1学习随笔之指针

    Swift中也有专门的指针类型,这些都被定义为Unsafe(不安全的),常见的有以下4种类型 UnsafePoin...

  • [Swift5.1] 21-指针

    指针 Swift中也有专门的指针类型,这些都被定性为“Unsafe”(不安全的),常见的有以下4种类型: Unsa...

  • Netty源码学习(6)--pipeline学习2

    Unsafe unsafe是不安全的意思,不要在应用程序里面直接使用Unsafe以及他的衍生类对象。Unsafe ...

  • C 指针内存管理

    // C 指针的内存管理 // C 指针在 Swift中被冠以 unsafe 的另一个是无法对其进行自动的内存管理...

网友评论

      本文标题:unsafe swift

      本文链接:https://www.haomeiwen.com/subject/avzuuktx.html