2016-02-29 87 views
0

我有两个数组:如何检查两个JNI数组指向同一个内存位置?

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

当我尝试:

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

我得到这个错误:

“JNI检测到的错误应用:尝试获取字节基本数组元素用浮子式[]的目的”

我的猜测是‘inputArray’(字节阵列)指向的相同的存储器位置‘输出’(float数组)。

我该如何检查?

+0

铸造'jobject'使得它不会改变基本的Java对象的类型没有什么意义。如果您确实需要以非实际类型的方式访问数据,则应在获取本机指针后执行转换。 – Michael

+0

这些是Java中的真实类型。我正在施放他们,因为我想在本地环境中与他们一起工作。所以“inputArray”是两个环境中的一个字节数组。我已经检查过很多次了,所以我不能再数了。 :( –

+1

好吧,我建议你写一个完整的最小代码示例,可以用来重现这个问题。如果这个例子没有最终出现同样的问题,那么你需要确定它与真实的不同之处码。 – Michael

回答

2

如果你可以告诉两个对象引用指向用JNI IsSameObject功能相同的对象。

错误消息告诉你,你在float[]调用GetByteArrayElements。获取数组对象的类(GetObjectClass)将让您查询的类别在它传递到本地代码点的对象,这样你就可以确认阵列具有你所期望的类型。从那里你可以缩小你的焦点并找出事情出错的地方。

相关问题