gpt4 book ai didi

java - 如何修复将使用 JNI 传输到 Java 的二维数组代码?

转载 作者:行者123 更新时间:2023-11-28 01:19:52 28 4
gpt4 key购买 nike

我试图将数组从 C++ 传递到 Java。编译没有错误。但未能运行(崩溃)。调试代码时返回码出错

我尝试实现此代码 how to return c++ char 2d array using JNI to JAVA

这是我的代码

    JNIEXPORT jobjectArray JNICALL my_function();
    // ...
// some code
// ...

// i want convert float point[3][2] to java

jclass intArray1DClass = env->FindClass("[I");
jclass intArray2DClass = env->FindClass("[[I");

// float point[3][2]
jint sizeX = 3;
jint sizeY = 2;


jobjectArray array2D = env->NewObjectArray(
sizeX, intArray2DClass, NULL);

for (jint i = 0; i < sizeX; i++)
{
jobjectArray array1D = env->NewObjectArray(
sizeY, intArray1DClass, NULL);

for (jint y = 0; y < sizeY; y++)
{
jfloatArray value = env->NewFloatArray(point[i][y]); // float point[3][2]
env->SetObjectArrayElement(array1D, y, value);
}

env->SetObjectArrayElement(array1D, i, array1D);
}

return array2D;

这就是我从 Java 调用函数的方式。对吗?

     float[][] point = my_function()

谢谢

更新

最后我使用了一维数组,因为它很容易编写代码。并根据 1D or 2D array, what's faster? , 我们应该使用一维数组

     jint sizeX = 6;

jfloatArray array1D = env->NewFloatArray(sizeX);

env->SetFloatArrayRegion(array1D, 0, sizeX, point);


return array1D;

最佳答案

首先,您似乎声明了 Java 整数数组,即 int [][],而不是 float[][]

第二,为什么要将 jfloatArray 设置为数组的元素?它应该是简单的 float 。

第三,在最后一行你可能是指 env->SetObjectArrayElement(array2D, i, array1D);

第四,当你声明数组时你需要指定它包含的类,所以对于二维数组它包含一维数组而对于一维数组它只包含 float 。

PS:链接的问题/答案实际上是返回 3D 数组。因此,您需要减少代码中的维数。

关于java - 如何修复将使用 JNI 传输到 Java 的二维数组代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56982936/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com