[英]cgo do i need to free the memory for a variable returned by a C function to go
我是cgo的新手,並且對內存管理有幾個問題。
假設我有一個簡單的c函數如下:
char* get_str_in_arr(char **charArr, size_t i){
return charArr[i];
}
我需要釋放內存如下:
func doSomething(){
cStr := C.get_str_in_arr(feats, C.size_t(1))
goStr := C.GoString(cStr)
defer C.free(unsafe.Pointer(cStr))
...
}
如果是這種情況,我需要使用從方法返回的任何變量來執行此操作。 例如ac Struct,uint32_t,...等
用C語言來比在Go方面更多地考慮它。 如果你正在返回(從你的C函數)一個指向一些已分配的(如在malloc()
)內存中的指針 - 應該被釋放(當然,如果在C代碼分配的其他內存中沒有引用它)。 如果你要返回一些結構(不是指向結構的指針)或整數 - 沒有什么可以釋放的。 如果你要返回一個指向某個靜態內存的指針 - 不應該被釋放。
所以,在你的榜樣是什么的問題feats
是,它是如何分配的,它是如何管理。 鑒於當前的代碼,你是否不可能給出關於是否需要free()
返回值的確定答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.