亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號