遇上一个头疼的问题 ReferenceTable overflow (max=1024)

先上源码
库是aes加解密的,通过swig来自动生成的接口
这个是wrap.cpp中的接口

SWIGEXPORT jint JNICALL Java_org_pjsip_pjsua_pjsuaJNI_do_1aes_1encode(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jbyteArray jarg3, jint jarg4, jbyteArray jarg5, jintArray jarg6) {
  jint jresult = 0 ;
  unsigned char *arg1 = (unsigned char *) 0 ;
  int arg2 ;
  unsigned char *arg3 = (unsigned char *) 0 ;
  int arg4 ;
  unsigned char *arg5 = (unsigned char *) 0 ;
  int *arg6 = (int *) 0 ;
  int result;
  
  (void)jenv;
  (void)jcls;
  {
    long receivedLength = jenv->GetArrayLength(jarg1);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg1 = (unsigned char *) jenv->GetByteArrayElements(jarg1, 0);
  }
  arg2 = (int)jarg2; 
  {
    long receivedLength = jenv->GetArrayLength(jarg3);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg3 = (unsigned char *) jenv->GetByteArrayElements(jarg3, 0);
  }
  arg4 = (int)jarg4; 
  {
    long receivedLength = jenv->GetArrayLength(jarg5);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg5 = (unsigned char *) jenv->GetByteArrayElements(jarg5, 0);
  }
  {
    long receivedLength = jenv->GetArrayLength(jarg6);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");
    }
    
    arg6 = (int *) jenv->GetIntArrayElements(jarg6, 0);
  }
  result = (int)do_aes_encode(arg1,arg2,arg3,arg4,arg5,arg6);
  jresult = (jint)result; 
  {
    // Allow the Java byte array to be garbage collected.
    if(arg1)   
    jenv->ReleaseByteArrayElements(jarg1, (jbyte *) arg1, JNI_COMMIT); // JNI_ABORT = Don't alter the original array.
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg3)   
    jenv->ReleaseByteArrayElements(jarg3, (jbyte *) arg3, JNI_COMMIT); // JNI_ABORT = Don't alter the original array.
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg5)   
    jenv->ReleaseByteArrayElements(jarg5, (jbyte *) arg5, JNI_COMMIT); // JNI_ABORT = Don't alter the original array.
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg6)
    jenv->ReleaseIntArrayElements(jarg6, (jint *) arg6, JNI_COMMIT); // JNI_ABORT = Don't alter the original array.
  }
  return jresult;
}


SWIGEXPORT jint JNICALL Java_org_pjsip_pjsua_pjsuaJNI_do_1aes_1decode(JNIEnv *jenv, jclass jcls, jbyteArray jarg1, jint jarg2, jbyteArray jarg3, jint jarg4, jbyteArray jarg5, jintArray jarg6) {
  jint jresult = 0 ;
  unsigned char *arg1 = (unsigned char *) 0 ;
  int arg2 ;
  unsigned char *arg3 = (unsigned char *) 0 ;
  int arg4 ;
  unsigned char *arg5 = (unsigned char *) 0 ;
  int *arg6 = (int *) 0 ;
  int result;
  
  (void)jenv;
  (void)jcls;
  {
    long receivedLength = jenv->GetArrayLength(jarg1);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg1 = (unsigned char *) jenv->GetByteArrayElements(jarg1, 0);
  }
  arg2 = (int)jarg2; 
  {
    long receivedLength = jenv->GetArrayLength(jarg3);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg3 = (unsigned char *) jenv->GetByteArrayElements(jarg3, 0);
  }
  arg4 = (int)jarg4; 
  {
    long receivedLength = jenv->GetArrayLength(jarg5);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");      
    }
    
    arg5 = (unsigned char *) jenv->GetByteArrayElements(jarg5, 0);
  }
  {
    long receivedLength = jenv->GetArrayLength(jarg6);
    
    if (receivedLength ==0 )
    {
      jclass excep = jenv->FindClass("java/lang/Exception");
      if (excep)
      jenv->ThrowNew(excep, "input data length is error");
    }
    
    arg6 = (int *) jenv->GetIntArrayElements(jarg6, 0);
  }
  result = (int)do_aes_decode(arg1,arg2,arg3,arg4,arg5,arg6);
  jresult = (jint)result; 
  {
    // Allow the Java byte array to be garbage collected.
    if(arg1)   
    jenv->ReleaseByteArrayElements(jarg1, (jbyte *) arg1, JNI_COMMIT); 
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg3)   
    jenv->ReleaseByteArrayElements(jarg3, (jbyte *) arg3, JNI_COMMIT);
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg5)   
    jenv->ReleaseByteArrayElements(jarg5, (jbyte *) arg5, JNI_COMMIT);
  }
  {
    // Allow the Java byte array to be garbage collected.
    if(arg6)
    jenv->ReleaseIntArrayElements(jarg6, (jint *) arg6, JNI_COMMIT);
  }
  return jresult;
}

5.0上就好好的,4.4.2上就会报ReferenceTable overflow  1024

根据一般的报这个错的都是因为没有Release*ArrayElements。。。。

而且5.0下可以,4.4.2下就不行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值