如何检查两个JNI阵列是否指向相同的内存位置?

时间:2016-02-29 13:22:07

标签: android-ndk

我有两个数组:

auto inputArray = reinterpret_cast<jbyteArray>(mainEnv->NewGlobalRef(imageDataArray));
auto output = reinterpret_cast<jfloatArray>(mainEnv->NewGlobalRef(data));

当我尝试:

auto input = env->GetByteArrayElements(inputArray, nullptr);

我收到此错误:

&#34;应用程序中的JNI检测错误:尝试使用float []&#34;

类型的对象获取字节原始数组元素

我猜是&#34; inputArray&#34; (字节数组)指向&#34;输出&#34;的相同内存位置(浮点数组)。

我该怎么检查?

1 个答案:

答案 0 :(得分:2)

您可以判断两个对象引用是否指向具有JNI IsSameObject函数的同一对象。

错误消息告诉您,您正在GetByteArrayElements上呼叫float[]。获取数组对象的类(使用GetObjectClass)可以让您在传递给本机代码的位置查询对象的类,这样您就可以确认数组具有您期望的类型。从那里你可以缩小你的注意力,找出出错的地方。