JNI在return语句中使用env-> GetStringUTFChars()

时间:2015-04-09 08:23:41

标签: java c++ java-native-interface

我有一个JNICALL,我将jstring传递给C ++,需要传递给C ++函数,它给我一个值。 是否可以在return语句中调用GetStringUTFChars。我担心的是,我无法调用ReleaseStringUTFChars来释放内存。

JNIEXPORT jint JNICALL Java_TestClass_getValue(JNIEnv *env, jobject obj, jstring name){
    return t1->getValue(env->GetStringUTFChars(name, 0));
}

它可以工作,但我不确定是否会出现内存泄漏或堆栈溢出。

我看到的唯一其他选择是做类似的事情:

JNIEXPORT jint JNICALL Java_TestClass_getValue(JNIEnv *env, jobject obj, jstring name){
    const char* nameChars = env->GetStringUTFChars(name, 0);
    env->ReleaseStringUTFChars(name, nameChars);
    return t1->getValue(nameChars);
}

但这可能更糟。因为根据the JNI documentation ReleaseStringUTFChars

  

通知VM本机代码不再需要访问utf

在我的情况下访问const char* nameChars。 但是当我需要传递nameChars时,我会尝试访问已经释放或即将被释放的变量。

我希望第一个版本是正确的。如果没有,你会建议什么? 即使未声明变量,是否已分配堆内存?

0 个答案:

没有答案