检测到Swig/Python内存泄漏

14 python swig memory-leaks

我有一个非常复杂的类,我试图在SWIG中创建Python包装器.但是,当我在Python中创建项目的实例时,我无法在没有收到消息的情况下初始化某些数据成员:

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

有谁知道我需要做些什么来解决这个问题?有没有我可以用来生成析构函数的标志?

ASk*_*ASk 10

SWIG总是生成析构函数包装器(除非使用%nodefaultdtor指令).但是,如果它对类型一无所知,它将生成一个不透明的指针包装器,这将导致泄漏(以及上面的消息).

请检查这myDataType是SWIG已知的类型.重新运行SWIG并打开调试消息并检查是否有类似的消息

Nothing is known about Foo base type - Bar. Ignored
Run Code Online (Sandbox Code Playgroud)

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

  • 应该打开哪个 SWIG 调试标志?其中一些会产生大量信息。我应该在哪个标志下查找您提到的消息? (2认同)

hha*_*fez -13

错误消息对我来说非常清楚,您需要为此类型定义一个析构函数。

  • 这是不正确的。完全有可能定义了析构函数,或者使用默认的析构函数而看不到此错误。重要的是 SWIG 知道这样一个析构函数的存在。请参阅:http://stackoverflow.com/questions/13587791/swig-and-c-memory-leak-with-vector-of-pointers/13593596#13593596 (3认同)