从cffi中的c函数传回来的自由字符串的规范方法?

时间:2017-06-08 15:19:05

标签: python cffi

<GroupBox>
    <GroupBox.Header>
        <StackPanel>
            <Image Source="pic.png" Stretch="None"/>
            <TextBlock Text="header..." />
        </StackPanel>
    </GroupBox.Header>
</GroupBox>

如果我将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 从c函数传递给python,python应该释放内存。但是,我该怎么办呢?

我目前的解决方法是在python中复制字符串,然后立即释放C中的字符串。因此,Python可以自动处理char *使用的内存。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

事实证明,我不需要复制ss已经是cdata的副本

def get_foo(x):
    cdata = C.foo(x)
    s = ffi.string(cdata)
    C.free_string(cdata)
    return s