为什么使用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;

一如既往是我自己的错。被分配的数组(像素)和它被复制到的数组的大小不相同。

一旦固定数组大小,一切都正常工作。

相关内容

  • 没有找到相关文章

最新更新