2015-03-02 61 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