3

在我编写的 android 代码的 jni 层中,我将一个数组从 jni 层返回到 java 层。我正在使用 DeleteLocalRef() 在传递结果之前释放本地引用。我只是想确保我编写的代码是正确的。请在下面找到代码。感谢任何帮助。

extern "C"
{
JNIEXPORT jbyteArray JNICALL Java_com_jni_btRead(JNIEnv* env, jobject)
{

    unsigned char* reply = btRead();

    jbyteArray jba;
    if(reply)
    {       
        jba = env->NewByteArray(2048);
        env->SetByteArrayRegion(jba, 0, 2048, reinterpret_cast<jbyte*>(reply));
    }
    else
    {       
        jba = env->NewByteArray(0);
    }

    env->DeleteLocalRef(jba);
    return jba;
}
}
4

2 回答 2

0

来自这里的报价:

本地引用仅在创建它的本机方法的动态上下文中有效,并且仅在本机方法的一次调用中有效。在本地方法执行期间创建的所有本地引用将在本地方法返回后被释放。

因此,您可能无法释放本地参考,因为它会自动释放。

于 2012-05-29T11:11:51.060 回答
0

局部变量总是在堆栈段中创建,因此在从函数返回后被销毁。这张图可能会有所帮助。

局部变量赋值

于 2012-05-29T11:55:42.183 回答