Канонический способ освободить строку, переданную обратно из функции переменного тока в cffi?
ffi = FFI()
C = ffi.dlopen("mycffi.so")
ffi.cdef("""
char* foo(T *t);
void free_string(char *s);
""")
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
ret = s[:]
C.free_string(cdata)
return ret
Если я передам char *
из функции c в python, python должен освободить память. Однако как мне это сделать?
Мой текущий обходной путь - скопировать строку в python, а затем сразу же освободить строку в C. Следовательно, Python может заботиться о памяти, используемой ret
автоматически.
Какой правильный способ сделать это?
1 ответ
Решение
Оказывается, мне не нужно копировать s
, s
это уже копия cdata
def get_foo(x):
cdata = C.foo(x)
s = ffi.string(cdata)
C.free_string(cdata)
return s