【问题标题】:Swig / Python memory leak detected检测到 Swig / Python 内存泄漏
【发布时间】:2010-10-29 10:12:06
【问题描述】:

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

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

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

【问题讨论】:

标签: python memory-leaks swig


【解决方案1】:

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

请检查 myDataType 是否为 SWIG 已知的类型。在打开调试消息的情况下重新运行 SWIG,并检查任何类似于

的消息
Nothing is known about Foo base type - Bar. Ignored

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

【讨论】:

  • 应该打开哪个 SWIG 调试标志?其中一些会产生大量信息。我应该在哪个标志下查找您提到的消息?
【解决方案2】:

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

【讨论】:

  • 这是不正确的。完全有可能定义了一个析构函数,或者使用了默认的默认析构函数而没有看到这个错误。重要的是 SWIG 知道这种析构函数的存在。见:stackoverflow.com/questions/13587791/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2012-07-16
  • 2012-01-22
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多