2017-02-01 10 views
0

https://golang.org/cmd/cgo/ говорит:Как освободить переменные C, используемые в параметрах

// 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). 

Что делать, если я использую C.CString встроенный в качестве параметра? Мне нужно было бы free() это так или иначе, не так ли? Что является лучшей практикой в ​​этом случае?

Пример:

ret := C.RandomCFunction(C.CString("foo")) 

ответ

1

Если вы используете его в качестве параметра строкового, вы можете только освободить его внутри функции. Хотя вы можете это сделать, это очень плохая практика. Если вы используете эту функцию в другом месте с переменной, которую планируете использовать позже, она будет непреднамеренно освобождать переменную.

Просто переместите строку перед вызовом функции в качестве переменной, вызовите функцию, а затем освободите ее.

+0

Как он ведет себя с не указателями? например 'value: = C.size_t (5)'. Они также должны быть свободными? – netsplit