Swig/Python 内存泄漏检测到

16

我有一个非常复杂的类,我正试图在SWIG中创建Python包装器。但是,当我在Python中创建该项的实例时,我无法初始化某些数据成员,否则就会收到以下消息:

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

有人知道我需要做什么来解决这个问题吗?是否有标志可以使用来生成析构函数?


1
相关问题:https://dev59.com/DmYr5IYBdhLWcg3wi63d#13593596 - Flexo
2个回答

12

SWIG总是生成析构函数包装器(除非使用%nodefaultdtor指令)。但是,在它不知道类型的情况下,它会生成一个不透明指针包装器,这将导致内存泄漏(和上面的消息一样)。

请确认myDataType是SWIG已知的类型。重新运行打开调试消息的SWIG,并检查是否有类似以下消息:

Nothing is known about Foo base type - Bar. Ignored

收到如上所述的消息意味着 SWIG 不完全了解您的类型层次结构,因此只能使用有限的信息进行操作 - 这可能导致它未生成 dtor。


2
应该打开哪个 SWIG 调试标志?其中一些会产生大量信息。我应该在哪个标志下寻找你提到的消息? - Michal

-13

对我来说,错误信息非常清晰,你需要为该类型定义一个析构函数。


3
这不正确。完全有可能定义了析构函数,或者使用默认的默认析构函数而没有看到这个错误。重要的是SWIG知道这样的析构函数的存在。参见:https://dev59.com/DmYr5IYBdhLWcg3wi63d#13593596 - Flexo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接