【问题标题】:How to free a malloc'ed char* returned with SWIG如何释放 SWIG 返回的 malloc'ed char*
【发布时间】:2012-08-24 15:56:56
【问题描述】:

我正在使用 SWIG,我的函数返回一个 char *,它是 malloc 的。 SWIG 返回PyString_FromStringAndSize(my-char-str, len)

有没有办法释放这个my-char-str 而无需编辑 C 包装器代码?

【问题讨论】:

  • 你为什么需要那个? swig 返回一个 python 字符串,当它被释放时,它负责释放内存。如果要删除它,只需删除对 python 字符串的所有引用。
  • @Bakuriu,完全有效的问题。 SWIG 包装返回的数据,但不知道它是 malloc 的,除非被告知。看我的回答。

标签: python c swig


【解决方案1】:

在您的.i 文件中使用%newobject 指令。来自 SWIG 2.0 documentation

如果你有一个这样分配内存的函数,

char *foo() {
   char *result = (char *) malloc(...);
   ...
   return result;
}

那么 SWIG 生成的包装器将发生内存泄漏——返回的数据将被复制到一个字符串对象中,而旧的内容将被忽略。

要修复内存泄漏,请使用 %newobject 指令。

%newobject foo;
...
char *foo();

【讨论】:

  • 这就是我要找的东西!
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多