Канонический способ освободить строку, переданную обратно из функции переменного тока в 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
Другие вопросы по тегам