报告将 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)
}