2015-03-02 66 views
0

我正在使用NDK在Android上使用一些DSP方法。 我打电话的主要活动像JNI中双阵列的大小NDK

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. 有谁能指出问题吗?

+0

你是否得到正确的n?如果不是,这可能是一个额外的论据。 – 18446744073709551615 2015-03-02 12:52:44

+0

n是正确的(= 5442),与尺寸 – hanaa 2015-03-02 13:51:32

回答

0

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

+0

是一样的,的确,它的sizeof(xr)/ sizeof(xr [0])' – 18446744073709551615 2015-03-02 14:01:05

+0

我试过你说的@mstorsjo它给了我这个:'Invalid indirect reference decodeIndirectRef中的0x428bc528' – hanaa 2015-03-02 14:03:54