Java 发布<;灵长类;Android NDK中的数组元素“原因”;JNI:pin计数“;警告

Java 发布<;灵长类;Android NDK中的数组元素“原因”;JNI:pin计数“;警告,java,android-ndk,java-native-interface,Java,Android Ndk,Java Native Interface,我试图在AndroidNDK中编写一些c代码,从java应用程序中获取一些数组变量,进行一些数学分析,并将结果返回给java。我目前的代码返回正确的数据,但每次调用函数时都会在logcat上产生警告: JNI: pincount on array 0x423d0de0 ([F) is now x pincount一直在上升,直到程序最终崩溃 据我所知,“pin”是在调用GetFloatArrayElements时创建的,在调用ReleaseFloatArrayElements时应该删除,但显然

我试图在AndroidNDK中编写一些c代码,从java应用程序中获取一些数组变量,进行一些数学分析,并将结果返回给java。我目前的代码返回正确的数据,但每次调用函数时都会在logcat上产生警告:

JNI: pincount on array 0x423d0de0 ([F) is now x
pincount一直在上升,直到程序最终崩溃

据我所知,“pin”是在调用GetFloatArrayElements时创建的,在调用ReleaseFloatArrayElements时应该删除,但显然我在某些地方出了问题。这是我的密码:

JNIEXPORT jfloat JNICALL
Java_net_zx82_rendertest_testHist(JNIEnv * env, jobject obj, jfloatArray dataArray, jfloatArray     gainArray, jfloatArray offsetArray)
{
//get data
jfloat *a = (*env)->GetFloatArrayElements(env, dataArray, 0);
jfloat *b = (*env)->GetFloatArrayElements(env, gainArray, 0);
jfloat *c = (*env)->GetFloatArrayElements(env, offsetArray, 0);

return a[100]*b[100]+c[100];    //do some sums

//release the data
(*env)->ReleaseFloatArrayElements(env, dataArray, a, 0);
(*env)->ReleaseFloatArrayElements(env, gainArray, b, 0);
(*env)->ReleaseFloatArrayElements(env, offsetArray, c, 0);
}

在编写的代码中,当到达
return
时,方法的执行将停止,
ReleaseFloatArrayElements
调用将永远不会执行

计算结果,将其存储在临时文件中,并在方法的最后返回


<>在C++中,可以创建助手类,当它们超出范围时,自动释放数组元素。例如,请参阅Android源代码中的“”类。

在编写的代码中,当到达
return
时,方法的执行将停止,
ReleaseFloatArrayElements
调用将永远不会执行

计算结果,将其存储在临时文件中,并在方法的最后返回

<>在C++中,可以创建助手类,当它们超出范围时,自动释放数组元素。例如,请参见Android源代码中的“”类