【问题标题】:size of double array in JNI NDKJNI NDK 中双精度数组的大小
【发布时间】:2015-03-02 10:38:31
【问题描述】:

我正在使用 NDK 在 Android 上开发一些 DSP 方法。 我在主要活动中调用卷积本机方法,例如

    public native int convolution(double[]xreal,double[]ximag,double[]yreal,double[]yimag,double[]outreal,double[]outimag, int n);

convolution.c 文件中:

JNIEXPORT jint JNICALL Java_com_example_convolution_MainActivity_convolution (JNIEnv *env, jobject obj, jdoubleArray xreal, jdoubleArray ximag, jdoubleArray yreal, jdoubleArray yimag, jdoubleArray outreal, jdoubleArray outimag, jsize n)
jdouble *xr,*xi, *yr, *yi;
jsize size = (*env)->GetArrayLength(env, xreal);//-----------changes
xr = (*env)->GetDoubleArrayElements(env, xreal, 0);
__android_log_print(ANDROID_LOG_VERBOSE,"MyTag", "The value of xr is %d", sizeof(xr)/sizeof(xr[0]);
xi = (*env)->GetDoubleArrayElements(env, ximag, 0);
yr = (*env)->GetDoubleArrayElements(env, yreal, 0);
yi = (*env)->GetDoubleArrayElements(env, yimag, 0);

问题是我得到了正确的xreal,ximag,yreal,yimag 大小,即 5442,但 xr 的大小始终为 1。 谁能指出问题所在?

【问题讨论】:

  • 你得到正确的 n 了吗?如果不是,它可能是一个额外的参数。
  • n 正确 (=5442),与 size 相同

标签: android android-ndk signal-processing


【解决方案1】:

您不能使用 sizeof 来获取作为指针传递给您的数组的大小 - sizeof(xr) 只为您提供指针变量的大小。您应该改用GetArrayLength(和size 变量),正如您在上面的行中所做的那样。

【讨论】:

  • 是的,确实是sizeof(xr)/sizeof(xr[0])
  • 我试过你所说的@mstorsjo,它给了我这个:'decodeIndirectRef 中的间接引用 0x428bc528 无效'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多