2016-02-20 21 views
1

我知道這已經被問過,但我的情況是一個三維數組,我沒把這裏給出的解決方案:我現在面臨Android passing large float arrays from native to java via jni. Getting error if over certain sizeJNI錯誤傳遞大數組從Java到C

類似的問題,我可以傳遞小數組,但不是更大的數組。 logcat上出現unpinedprimitivearray錯誤。

這裏是我的C代碼:

#include <jni.h> 
#include <stdio.h> 
#include<stddef.h> 


JNIEXPORT jdouble JNICALL Java_com_example_invert_MainActivity_inv 
    (JNIEnv *env, jobject obj, jobjectArray arr){ 
    double sum = 0; 
    int i,j,k; 

    jsize dim1 = (*env)->GetArrayLength(env, arr); 

     for (i=0; i<dim1; i++){ 

      jdoubleArray *line1 = (*env)->GetObjectArrayElement(env, arr, i); 
      int dim2 =  (*env)->GetArrayLength(env, line1); 
      jdouble *pos1 = (*env)->GetDoubleArrayElements(env, line1, 0); 

      for (j=0; j<dim2; j++){ 
       jdoubleArray *line2 = (*env)->GetObjectArrayElement(env, line1, j); 
       int dim3 =  (*env)->GetArrayLength(env, line2); 
       jdouble *pos2 = (*env)->GetDoubleArrayElements(env, line2, 0); 

       for (k=0; k<dim3; k++){ 
            sum += pos2[k]; 
        } 
       (*env)->ReleaseDoubleArrayElements(env, arr, pos2, 0); 
       (*env)->ReleaseDoubleArrayElements(env, arr, line2, 0); 
       } 

      (*env)->ReleaseDoubleArrayElements(env, arr, pos1, 0); 

      (*env)->ReleaseDoubleArrayElements(env, arr, line1, 0); 
     } 



    return sum; 

} 

和全logcat的輸出:

02-20 18:35:42.784: W/dalvikvm(9385): VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;) 
02-20 18:35:42.784: I/dalvikvm(9385): Could not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.internal.view.WindowCallbackWrapper.onSearchRequested 
02-20 18:35:42.784: W/dalvikvm(9385): VFY: unable to resolve interface method 14481: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z 
02-20 18:35:42.784: D/dalvikvm(9385): VFY: replacing opcode 0x72 at 0x0002 
02-20 18:35:42.784: I/dalvikvm(9385): Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from method android.support.v7.internal.view.WindowCallbackWrapper.onWindowStartingActionMode 
02-20 18:35:42.784: W/dalvikvm(9385): VFY: unable to resolve interface method 14485: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode; 
02-20 18:35:42.784: D/dalvikvm(9385): VFY: replacing opcode 0x72 at 0x0002 
02-20 18:35:42.914: I/dalvikvm(9385): Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
02-20 18:35:42.914: W/dalvikvm(9385): VFY: unable to resolve virtual method 406: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
02-20 18:35:42.914: D/dalvikvm(9385): VFY: replacing opcode 0x6e at 0x0002 
02-20 18:35:42.914: I/dalvikvm(9385): Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
02-20 18:35:42.914: W/dalvikvm(9385): VFY: unable to resolve virtual method 428: Landroid/content/res/TypedArray;.getType (I)I 
02-20 18:35:42.914: D/dalvikvm(9385): VFY: replacing opcode 0x6e at 0x0002 
02-20 18:35:43.264: D/libEGL(9385): loaded /vendor/lib/egl/libEGL_adreno.so 
02-20 18:35:43.284: D/libEGL(9385): loaded /vendor/lib/egl/libGLESv1_CM_adreno.so 
02-20 18:35:43.294: D/libEGL(9385): loaded /vendor/lib/egl/libGLESv2_adreno.so 
02-20 18:35:43.304: I/Adreno-EGL(9385): <qeglDrvAPI_eglInitialize:316>: EGL 1.4 QUALCOMM build: LNXBUILD_AU_LINUX_ANDROID_JB_3.2.4.04.03.00.173.012+PATCH[ES]_msm8226_JB_3.2.4__release_ENGG() 
02-20 18:35:43.304: I/Adreno-EGL(9385): OpenGL ES Shader Compiler Version: 20.00.01 
02-20 18:35:43.304: I/Adreno-EGL(9385): Build Date: 02/27/14 Thu 
02-20 18:35:43.304: I/Adreno-EGL(9385): Local Branch: 
02-20 18:35:43.304: I/Adreno-EGL(9385): Remote Branch: quic/jb_3.2.4 
02-20 18:35:43.304: I/Adreno-EGL(9385): Local Patches: 7de55685a2714b78da20f2a126b0dd72b0d2c0c4 Merge "PROFILER: fix default enabled/disabled setting" 
02-20 18:35:43.304: I/Adreno-EGL(9385):     75d04ab84c7a68c72d92d59aae1827fcfef44b91 PROFILER: fix default enabled/disabled setting 
02-20 18:35:43.304: I/Adreno-EGL(9385): Reconstruct Branch: LOCAL_PATCH[ES] 
02-20 18:35:43.414: D/OpenGLRenderer(9385): Enabling debug mode 0 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.224: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.234: W/dalvikvm(9385): JNI: unpinPrimitiveArray(0x42514190) failed to find entry (valid=1) 
02-20 18:35:44.244: E/dalvikvm(9385): JNI ERROR (app bug): local reference table overflow (max=512) 
02-20 18:35:44.244: W/dalvikvm(9385): JNI local reference table (0x603c5f78) dump: 
02-20 18:35:44.244: W/dalvikvm(9385): Last 10 entries (of 512): 
02-20 18:35:44.244: W/dalvikvm(9385):  511: 0x42519650 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  510: 0x42519628 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  509: 0x42519600 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  508: 0x425195d8 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  507: 0x425195b0 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  506: 0x42519588 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  505: 0x42519560 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  504: 0x42519538 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  503: 0x42519510 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):  502: 0x425194e8 double[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385): Summary: 
02-20 18:35:44.244: W/dalvikvm(9385):   4 of java.lang.Class (4 unique instances) 
02-20 18:35:44.244: W/dalvikvm(9385):   2 of java.lang.String (2 unique instances) 
02-20 18:35:44.244: W/dalvikvm(9385):  480 of double[] (2 elements) (480 unique instances) 
02-20 18:35:44.244: W/dalvikvm(9385):   1 of java.lang.String[] (2 elements) 
02-20 18:35:44.244: W/dalvikvm(9385):   1 of com.example.invert.MainActivity 
02-20 18:35:44.244: W/dalvikvm(9385):  23 of double[][] (21 elements) (23 unique instances) 
02-20 18:35:44.244: W/dalvikvm(9385):   1 of double[][][] (30 elements) 
02-20 18:35:44.244: E/dalvikvm(9385): Failed adding to JNI local ref table (has 512 entries) 
02-20 18:35:44.244: I/dalvikvm(9385): "main" prio=5 tid=1 RUNNABLE 
02-20 18:35:44.244: I/dalvikvm(9385): | group="main" sCount=0 dsCount=0 obj=0x41801710 self=0x417ec980 
02-20 18:35:44.244: I/dalvikvm(9385): | sysTid=9385 nice=0 sched=0/0 cgrp=apps handle=1074262012 
02-20 18:35:44.244: I/dalvikvm(9385): | state=R schedstat=(0 0 0) utm=37 stm=11 core=3 
02-20 18:35:44.244: I/dalvikvm(9385): at com.example.invert.MainActivity.inv(Native Method) 
02-20 18:35:44.244: I/dalvikvm(9385): at com.example.invert.MainActivity$1.onClick(MainActivity.java:71) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.view.View.performClick(View.java:4476) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.view.View$PerformClick.run(View.java:18795) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.os.Handler.handleCallback(Handler.java:730) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.os.Looper.loop(Looper.java:176) 
02-20 18:35:44.244: I/dalvikvm(9385): at android.app.ActivityThread.main(ActivityThread.java:5493) 
02-20 18:35:44.244: I/dalvikvm(9385): at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 18:35:44.244: I/dalvikvm(9385): at java.lang.reflect.Method.invoke(Method.java:525) 
02-20 18:35:44.244: I/dalvikvm(9385): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225) 
02-20 18:35:44.244: I/dalvikvm(9385): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041) 
02-20 18:35:44.244: I/dalvikvm(9385): at dalvik.system.NativeStart.main(Native Method) 
02-20 18:35:44.244: E/dalvikvm(9385): VM aborting 
02-20 18:35:44.244: A/libc(9385): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 9385 (.example.invert) 

能否請您糾正我的代碼來處理大型陣列?等待你的幫助。

+0

請logcat的輸出粘貼到你的問題。 – fadden

+0

@fadden我加了吧 – user5956131

回答

0

發生了什麼事是要創建大量本地引用,並沒有將其刪除。最終表格填滿,虛擬機中止。

查看失敗的摘要部分,有double[]的480個實例和double[][]的23個實例,因此這是您需要查看的內容。

unpinPrimitiveArray消息表明您試圖刪除本地引用,但未能這樣做,因爲您傳入的值無法找到。看看你的代碼,你似乎將相同的數組引用(arr)傳遞給每個發佈調用,這是不正確的。您應該傳遞您固定的數組對象以及相應的基本數組指針。此外,在某些情況下,您正在調用錯誤的釋放功能。

例如,這樣的:

jdoubleArray *line2 = (*env)->GetObjectArrayElement(env, line1, j); 
int dim3 =  (*env)->GetArrayLength(env, line2); 
jdouble *pos2 = (*env)->GetDoubleArrayElements(env, line2, 0); 
... 
(*env)->ReleaseDoubleArrayElements(env, arr, pos2, 0); 
(*env)->ReleaseDoubleArrayElements(env, arr, line2, 0); 

應該是:

(*env)->ReleaseDoubleArrayElements(env, line2, pos2, 0); 
(*env)->DeleteLocalRef(env, line2); 

pos2來自line2,因此這些值需要傳遞同一個發行通話。所述line2參考是jobject,不是原始陣列,所以應使用DeleteLocalRef呼叫。

您需要pos1/line1一個類似的修復。

又見JNI Tips頁。

+0

謝謝。它現在有效。非常感謝@fadden! – user5956131

0

你不應該叫ReleaseDoubleArrayElements的事情,你沒有使用GetDoubleArrayElements獲得。

對於line1line2你應該叫DeleteLocalRef,不ReleaseDoubleArrayElements