英文:
How to free C variables used in parameters
问题
根据你提供的内容,以下是翻译好的部分:
https://golang.org/cmd/cgo/ 上写道:
// C 字符串是在 C 堆上使用 malloc 分配的。
// 调用者有责任安排它被释放,比如通过调用 C.free(如果需要,请确保包含 stdlib.h)。
如果我在参数中内联使用 C.CString
,我仍然需要调用 free()
吗?在这种情况下,最佳实践是什么?
示例:
ret := C.RandomCFunction(C.CString("foo"))
英文:
https://golang.org/cmd/cgo/ says:
// The C string is allocated in the C heap using malloc.
// It is the caller's responsibility to arrange for it to be
// freed, such as by calling C.free (be sure to include stdlib.h
// if C.free is needed).
What if I use C.CString
inline as parameter? I would have to free()
it anyways, right? What is best practise in this case?
Example:
ret := C.RandomCFunction(C.CString("foo"))
答案1
得分: 1
如果将其作为内联参数使用,你只能在函数内部释放它。虽然你可以这样做,但这是一个非常糟糕的做法。如果你在其他地方使用这个函数,并且计划稍后使用一个变量,它将意外地释放该变量。
只需将字符串移到函数调用前面作为一个变量,调用函数,然后释放它。
英文:
If you use it as inline parameter, you can only free it inside the function. While you could do that, it's a really bad practice. If you use this function elsewhere with a variable that you plan on using later, it will free the variable unintentionally.
Just move the string in front of the function call as a variable, call the function and then free it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论