簡體   English   中英

我需要為C函數返回的變量釋放內存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM