如何解决SWIG生成的代码在提前返回时会泄漏内存
给出以下脚本:
%typemap(in,noblock=1) int * {
$1 = malloc(sizeof(int));
if($1 == NULL) {
return $null;
}
}
%typemap(freearg,noblock=1) int * {
free($1);
}
void afunc(int *varA,int *varB);
对于Java,SWIG生成:
SWIGEXPORT void JNICALL Java_testmoduleJNI_afunc(JNIEnv *jenv,jclass jcls,jlong jarg1,jlong jarg2) {
int *arg1 = (int *) 0 ;
int *arg2 = (int *) 0 ;
(void)jenv;
(void)jcls;
arg1 = malloc(sizeof(int));
if(arg1 == NULL) {
return ;
}
arg2 = malloc(sizeof(int));
if(arg2 == NULL) {
return ;
}
afunc(arg1,arg2);
free(arg1);
free(arg2);
}
如果arg2
无法成功分配,这将泄漏为arg1
分配的内存。 Python和其他语言具有SWIG_fail,但Java不存在。有什么办法可以避免这种情况?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。