Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWIG生成的代码在提前返回时泄漏内存_Java_Swig - Fatal编程技术网

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问题)