在结构内部分配数组的SWIG内存问题

时间:2017-08-09 17:28:43

标签: python c swig

假设我有一个像这样的C结构

struct foo {
    int sz;
    struct bar **arr;
};

在我的SWIG文件中,我使用“carrays.i”来控制此结构中的数组。我在这里使用

%module mdl
%include "carrays.i"
%array_functions(struct bar*, barArray)

然后我在python中为这个数组分配内存。

a = mdl.foo()
a.arr = mdl.new_barArray(sz)

我的问题是,我应该通过调用

来释放已分配数组的内存
mdl.delete_barArray(a.arr)

退出当前功能之前,或者SWIG会自动为我做这个,所以我不需要担心吗?

1 个答案:

答案 0 :(得分:0)

当不再需要数组时,您必须调用delete。如果在foo对象引用计数变为零并且被销毁之前没有这样做,则会发生内存泄漏。