在结构内部分配数组的 SWIG 内存问题
SWIG memory issue of allocating array inside a struct
假设我有这样一个 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 会自动为我执行此操作,所以我无需担心?
当不再需要该数组时,您必须调用 delete。如果在 foo
对象引用计数变为零并被销毁之前不这样做,就会发生内存泄漏。
假设我有这样一个 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 会自动为我执行此操作,所以我无需担心?
当不再需要该数组时,您必须调用 delete。如果在 foo
对象引用计数变为零并被销毁之前不这样做,就会发生内存泄漏。