It's not clear what the order of the Pointers in JNI is (it might not be appropriate to describe them).
The following code, which follows the order of incoming pointers, crashes as soon as it runs. As follows:
1 jniexport jint jnicall java_com_example_x_xx_xxx2(JNIENV *env, Jclass, Jbytearray databuf, jint width, jint height, jstring path, Jintarray x1)3 {4jboolean* Parraydata = (jboolean*) env->getprimitivearraycritical (Databuf,0);5 Char* Papath=env->getstringutfchars (PATH,0);6jint* pAx1 = (jint*) env->getprimitivearraycritical (x1,0);7 8 //Code;9 TenEnv->releaseprimitivearraycritical (Databuf, Parraydata,0); OneEnv->releasestringutfchars (path, papath); AEnv->releaseprimitivearraycritical (x1, pAx1,0); - - returneyedist; the}
The order of the pointers is then changed slightly, and then you can run past them. As follows:
1 jniexport jint jnicall java_com_example_x_xx_xxx2(JNIENV *env, Jclass, Jbytearray databuf, jint width, jint height, jstring path, Jintarray x1)3 {4jboolean* Parraydata = (jboolean*) env->getprimitivearraycritical (Databuf,0);5jint* pAx1 = (jint*) env->getprimitivearraycritical (x1,0);6 Char* Papath=env->getstringutfchars (PATH,0);7 8 //Code;9 TenEnv->releaseprimitivearraycritical (Databuf, Parraydata,0); OneEnv->releaseprimitivearraycritical (x1, pAx1,0); AEnv->releasestringutfchars (path, papath); - - returneyedist; the}
(original) Do not understand JNI pointer invocation order