NDK を使用して、Java に大きなバッファを割り当てます。
allocNativeBuffer(JNIEnv* env, jobject cls, jlong size) {
void* buffer = malloc(size);
jobject directBuffer = env->NewDirectByteBuffer(buffer, size);
jobject globalRef = env->NewGlobalRef(directBuffer);
return globalRef;
}
このバッファを使用した後、割り当てを解除します。
freeNativeBuffer(JNIEnv* env, jobject cls, jobject globalRef) {
void *buffer = env->GetDirectBufferAddress(globalRef);
env->DeleteGlobalRef(globalRef);
free(buffer);
}
Android 2.2 では問題なく動作しますが、Android 4.0.3 では DeleteGlobalRef 呼び出し中にアプリケーションがクラッシュします。私は何を間違っていますか?