2017-02-02 9 views
0

Я смущен, если мне нужно очистить память в следующем сценарии?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 
} 
+0

Вы не можете этого сделать. Внимательно прочитайте раздел [Проходные указатели] (https://golang.org/cmd/cgo/#hdr-Passing_pointers) – JimB

ответ

1

Да, это определенно будет сбор мусора в Go, поскольку память создается в Go.