为了账号安全,请及时绑定邮箱和手机立即绑定

如果说java方法有问题,于是我写了一个空的java方法,调用10多次后,还是会报错?为什么

如果说java方法有问题,于是我写了一个空的java方法,调用10多次后,还是会报错?为什么

C++
12345678_0001 2023-03-18 17:13:45
在java层有一个带参数的方法:public void test(int i){ Log.d("Test",i)}然后声明了一个native方法:public native void nativeTest();JNI层:我使用的是非静态调用(其中"java_obj"之前已实例化)JNIEXPORT void JNICALL Java_aaa_bbb_CCC_nativeTest (JNIEnv * env, jobject obj, jint index){ /*获得类名*/ jclass java_class = env->FindClass("aaa/bbb/CCC"); if (java_class == 0){ LOGE("not find class!"); return; } /*判断对象是否存在*/ if (java_obj == 0){ LOGE("not find java OBJ!"); return; } /*获取类中的方法*/ jmethodID java_method = env->GetMethodID(java_class, "test", "(I)V"); if(java_method == 0){ LOGE("not find java method!"); return; } /*调用方法*/ env->CallVoidMethod(java_obj, java_method, index);}重点来了,我在另一个cpp调用上述方法时,运行没问题,也能打出log,但是当该方法被调用多次时(大约10多次),内存泄露。最终我将错误锁定在上述红色字体部分,因为当我没有调用CallVoidMethod,啥问题都没有。
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

jmethodID java_method = env->GetMethodID(java_obj , "init", "()V"); 这么获取,不是通过class

查看完整回答
反对 回复 2023-03-21
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

每次调用完后要删除local reference才行。env->DeleteLocalRef(java_class);

查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信