Я смущен, если мне нужно очистить память в следующем сценарии?CGO Я передаю структуру C с указателем на значение функции go,
У меня есть функция C, которая создает структуру C и передает ее функции Go. C struct содержит массив значений (используя арифметику указателя). Функция Go заполняет этот массив и возвращается. В вызывающей функции C я копирую значения из структуры C и не сохраняю их.
Поскольку это создано в Go, этот мусор собрал?
/*
C code
*/
int go_func(c_struct *s);
struct c_struct{
val *values;
size_t *values_cnt;
};
void example_call()
{
struct c_struct s;
go_func(&s)
copy_values(s)
}
/*
go code
*/
func go_func(c *C.c_struct){
var varr *C.val
var v C.val = createValues()
C.set_val_in_array(varr, *v, C.size_t(0))
c.values = varr
}
Вы не можете этого сделать. Внимательно прочитайте раздел [Проходные указатели] (https://golang.org/cmd/cgo/#hdr-Passing_pointers) – JimB