1
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はそのメモリを解放します。しかし、どうしたらいいですか?cffiのc関数から返された文字列を正規化する方法はありますか?
私の現在の回避策は、Pythonで文字列をコピーして、すぐにCで文字列を解放することです。したがって、Pythonはret
によって自動的に使用されるメモリを処理することができます。
これを行う正しい方法は何ですか?