小编ant*_*o96的帖子

CGO 指针检查中的已知实现错误

根据 CGO 的文档(https://pkg.go.dev/cmd/cgo),在实现中有一个已知的错误:

注意:当前的实现有一个错误。虽然 Go 代码允许将 nil 或 C 指针(但不是 Go 指针)写入 C 内存,但如果 C 内存的内容看起来是 Go 指针,当前实现有时可能会导致运行时错误。因此,如果 Go 代码要在其中存储指针值,请避免将未初始化的 C 内存传递给 Go 代码。在将 C 中的内存传递给 Go 之前将其清零。

我在 GitHub 的问题跟踪器中寻找过这个,但在那里找不到。有人可以详细说明为什么会发生这种情况吗?运行时如何在未初始化的 C 内存中找到 Go 指针?

例如。假设我将一个未初始化的字符数组传递给 C 中的 Go 函数,运行时如何解释该内存中的 Go 指针?

此外,“如果 Go 代码将在其中存储指针值”部分让我感到困惑。为什么以后使用这个内存很重要?

go cgo

5
推荐指数
1
解决办法
99
查看次数

标签 统计

cgo ×1

go ×1