检测到Swig/Python内存泄漏

16 投票
2 回答
16095 浏览
提问于 2025-04-15 11:52

我有一个非常复杂的类,我正在尝试用SWIG为它创建Python的包装器。不过,当我在Python中创建这个类的实例时,我发现无法初始化某些数据成员,并且收到了这样的提示信息:

>>> myVar = myModule.myDataType()
swig/python detected a memory leak of type 'MyDataType *', no destructor found.

有没有人知道我该怎么解决这个问题?我是否需要使用某个标志来生成析构函数?

2 个回答

-13

这个错误信息对我来说很清楚,你需要为这个类型定义一个析构函数。

12

SWIG总是会生成析构函数的包装代码(除非你使用了%nodefaultdtor这个指令)。不过,如果它对某个类型一无所知,就会生成一个不透明的指针包装,这样可能会导致内存泄漏(还有上面提到的警告信息)。

请确认myDataType是SWIG所知道的类型。可以重新运行SWIG,并打开调试信息,查看是否有类似下面的信息:

Nothing is known about Foo base type - Bar. Ignored

收到这样的信息意味着SWIG对你的类型层次结构了解得不够全面,因此只能根据有限的信息进行操作,这可能导致它不生成析构函数。

撰写回答