我正在使用SWIG,我的函数返回char *
,这是malloc'ed。
SWIG返回PyString_FromStringAndSize(my-char-str, len)
。
有没有办法在不编辑C包装器代码的情况下释放此my-char-str
?
答案 0 :(得分:6)
在%newobject
文件中使用.i
指令。来自SWIG 2.0 documentation:
如果你有一个像这样分配内存的函数,
char *foo() {
char *result = (char *) malloc(...);
...
return result;
}
然后SWIG生成的包装器将发生内存泄漏 - 返回的数据将被复制到字符串对象中并忽略旧内容。
要修复内存泄漏,请使用%newobject指令。
%newobject foo;
...
char *foo();