You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用NewStringUTF/DeleteLocalRef触发JNI失效本地引用错误求助

JNI错误:删除字符串本地引用时触发"stale local reference"报错

我在Android Studio中创建了基础的「Native C++」应用,修改native-lib.cpp代码如下:

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_jnitest_MainActivity_stringFromJNI(JNIEnv* env, jobject /* this */)
{
    jstring jniHeader = env->NewStringUTF("x-foo");
    env->DeleteLocalRef(jniHeader);    // 此处触发报错
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

调试运行时出现以下错误:

09-09 17:23:25.371 7512-7512 E/example.jnites: JNI ERROR (app bug): accessed stale Local 0x79  (index 7 in a table of size 7)

[ 09-09 17:23:25.372  7512: 7512 F/example.jnites ]
java_vm_ext.cc:577] JNI DETECTED ERROR IN APPLICATION: use of deleted local reference 0x79
java_vm_ext.cc:577]     from java.lang.String  com.example.jnitest.MainActivity.stringFromJNI()

我想知道是否不能对jstring类型调用DeleteLocalRef()?相关JNI文档里没有提到这个限制。另外我尝试用PushLocalFrame()/PopLocalFrame()替代手动删除本地引用,仍然会报错;创建全局引用也只是改变了错误类型,问题依旧存在。

补充环境信息:

  • 运行环境:Mac
  • Android模拟器:API 30
  • build.gradle配置:compileSdkVersion 29,targetSdkVersion 28,minSdkVersion 28
  • Android Studio版本:4.2.2,运行时版本11.0.8+10-b944.6916264 x86_64

内容的提问来源于stack exchange,提问作者Edward Falk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:48:25