JNI NDK中双数组的大小

时间:2015-03-02 10:38:31

标签: android android-ndk signal-processing

我正在使用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。 有人能指出问题吗?

1 个答案:

答案 0 :(得分:0)

您无法使用sizeof来获取作为指针传递给您的数组的大小 - sizeof(xr)仅为您提供指针变量的大小。您应该使用GetArrayLength(以及size变量),就像在上面一行中正确使用一样。