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 (将#修改为@)