4

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

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

4

1 回答 1

9

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

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

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

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

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

%newobject foo;
...
char *foo();
于 2012-08-24T22:21:02.650 回答