我使用 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 调用期间崩溃。我究竟做错了什么?