Java SWIG生成的代码在提前返回时泄漏内存
给定以下脚本:Java SWIG生成的代码在提前返回时泄漏内存,java,swig,Java,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 Ja
%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不存在这种情况。有什么办法可以避免这个吗?你瞄准C++吗?或者GCC扩展?C++(为了避免其他的SWIG问题),你是针对C++吗?还是使用GCC扩展?C++(避免其他的SWIG问题)