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