如何释放与SWIG一起返回的malloc'ed char *

时间:2012-08-24 15:56:57

标签: python c swig

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

有没有办法在不编辑C包装器代码的情况下释放此my-char-str

1 个答案:

答案 0 :(得分:6)

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

  

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

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

然后SWIG生成的包装器将发生内存泄漏 - 返回的数据将被复制到字符串对象中并忽略旧内容。

     

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

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