1

グローバル初期化子は次のとおりです。

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 配列が埋められます。

4

1 に答える 1

1

いつものように、それは私自身のせいでした。割り当てられた配列 (ピクセル) とコピー先の配列が同じサイズではありませんでした。

配列のサイズを修正すると、すべてが正しく機能しました。

于 2013-01-21T11:45:04.707 に答える