【问题标题】:SWIG memory issue of allocating array inside a struct在结构内分配数组的 SWIG 内存问题
【发布时间】:2017-08-09 17:28:42
【问题描述】:

假设我有一个这样的 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 会自动为我执行此操作,因此我无需担心?

【问题讨论】:

    标签: python c swig


    【解决方案1】:

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

    【讨论】: