2013-01-21 51 views
1

這裏是全球初始化:爲什麼使用Android NDK通過JNI將本地數組複製回Java不能正確填充?

int width = 100; 
int height = 100; 
int cells = width * height; 
int* pixels = (int*) malloc(sizeof(int) * cells); 

int i; 

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

    pixels[i] = 255; 

} 

這裏是通過JNI調用數組複製備份到Java代碼:

void Java_com_example_app_setPixels(
     JNIEnv *env, jobject obj, jintArray arr) { 

    // initializations, declarations, etc 
    jint *c_array; 
    jint i = 0; 

    // get a pointer to the array 
    c_array = (*env)->GetIntArrayElements(env, arr, NULL); 

    // do some exception checking 
    if (c_array == NULL) { 
     return; /* exception occurred */ 
    } 

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

     c_array[i] = (jint) pixels[i]; 

    } 

    // release the memory so java can have it again 
    (*env)->ReleaseIntArrayElements(env, arr, c_array, 0); 

} 

這導致大多充滿Java數組 - 但它停止大約有80%的路程通過。

然而如果我改變:

 c_array[i] = (jint) pixels[i]; 

 c_array[i] = 255; 

的改進的Java陣列被充滿。

回答

1

一如既往,這是我自己的錯。被分配的數組(像素)和它被複制到的數組大小不一樣。

一旦修正陣列大小,一切正常。

相關問題