gpt4 book ai didi

cgo 我需要为 C 函数返回的变量释放内存吗?

转载 作者:IT王子 更新时间:2023-10-29 02:22:49 25 4
gpt4 key购买 nike

我是 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))
...
}

如果是这种情况,我是否需要对从方法返回的任何变量执行此操作。例如 c 结构、uint32_t、...等

最佳答案

从 C 的角度而不是从 Go 的角度来考虑它。如果你(从你的 C 函数)返回一个指向一些已分配(如 malloc())内存的指针——那应该被释放(当然,如果它没有在由分配的其他内存中引用) C代码)。如果你要返回一些结构(不是指向结构的指针)或整数——没有什么可以释放的。如果您要返回指向某个静态内存的指针,则不应释放该内存。

所以在您的示例中,问题是feats 是什么,它是如何分配的,它是如何管理的。鉴于当前的代码,不可能就您是否需要 free() 返回值给出明确的答案。

关于cgo 我需要为 C 函数返回的变量释放内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39288118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com