【发布时间】:2021-10-27 09:19:10
【问题描述】:
指针去初始化后可以使用内存吗?
例如
let q = UnsafeMutablePointer<Float>.allocate(capacity: 1)
q.pointee = 123.125
let bq = UnsafeRawBufferPointer(start: q.deinitialize(count: 1), count: 4) // (*)
for i in bq.reversed() {
print(String(i, radix: 16), terminator: " ")
}
q.deallocate()
print()
这是我这个任务的核心解决方案:https://pl.spoj.com/problems/PP0504D/
任务中的问题很简单:编写一个函数,显示浮点值的机器字节表示。
float2bytes(123.125) prints 42 f6 40 0
但这不是问题的关键。
我对指针并不深入。我的疑问是:我可以在取消初始化后使用由另一个指针指向的内存(该内存未被释放)吗?取消初始化的真正含义是什么?
let p = UnsafeMutablePointer<Int>.allocate(capacity: 1)
p.initialize(to: 7)
print(p.pointee)
p.initialize(to: 9)
p.deinitialize(count: 1)
// something may crash the memory in this place?
print(p.pointee)
p.deallocate()
谁能告诉我deinicialize(count:)之后导致崩溃的代码?
【问题讨论】:
-
您需要用英语解释您要解决的问题,因为 SO 的语言是英语,而链接的问题是波兰语。
-
我更正了我的帖子