我有一个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
时,我会尝试访问已经释放或即将被释放的变量。
我希望第一个版本是正确的。如果没有,你会建议什么? 即使未声明变量,是否已分配堆内存?