为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go + SWIG + C++ 代码中清理内存管理

在 Go + SWIG + C++ 代码中清理内存管理

Go
哆啦的时光机 2022-07-18 15:50:15
我正在通过 SWIG 使用来自 Go 的 C++ 库。SWIG 不负责内存管理,因此 Go 端看起来像这样:f := NewFoo() defer DeleteFoo(f)DeleteFoo(f)当我创建时调用f它很容易,但是对于 C++ 函数的返回值很容易忽略它。我想自动检查我的代码是否正确。我看到 Address Sanitizer 是为 GCC 和 Clang 实现的,这听起来是正确的。但是我找不到一个明确的方法来为我的go test命令启用它。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

Defer在块内的工作(功能等)中非常有用。然而,这并不总是足够的。
你需要什么runtime.SetFinalizer

直接来说,我不认为你可以用 Go 来检查其他任何东西的内存状态。(所以在 C 或 C++ 中分配的内存。)

如果我是你,我会将 C 代码的一部分编译为共享的。稍后我可以很容易地使用诸如 clang 之类的工具来检查这一点。如果你的 C 代码没有问题,你就无法干扰 Go 的 gc。


查看完整回答
反对 回复 2022-07-18
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我认为CC="clang -fsanitize=address" go testCC="gcc -fsanitize=address" go test应该工作。



查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信