我在Go代码中创建了C结构,如下所示:
var data C.MyStruct_t
我是否必须在某些时候手动释放它们,就像我使用CString时一样?使用CString我经常做类似的事情:
ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)
答案 0 :(得分:4)
没有。您只能对通过C free
函数分配的内容调用*alloc
。 C.CString
和C.CBytes
函数记录为在内部执行此操作,并且需要使用C.free
。
在这种情况下,即使data
的类型为C.MyStruct_t
,它也会在Go中分配,因此将由Go垃圾收集器处理。