报告将 unsafe.Pointer 转换为 uintptr、加上偏移量,然后将结果转换回 unsafe.Pointer 的指针算术运算。
这种模式可能不安全,因为 uintptr 值在转换和下次指针使用之间可能会被垃圾收集器观察到。 在 Go 1.17 及更高版本中,unsafe.Add 直接表示相同的操作。
示例:
func Offset(p unsafe.Pointer, n int) unsafe.Pointer {
return unsafe.Pointer(uintptr(p) + uintptr(n))
}
要修正代码,请使用使用 unsafe.Add 简化指针加法快速修复。
在应用快速修复后:
func Offset(p unsafe.Pointer, n int) unsafe.Pointer {
return unsafe.Add(p, n)
}