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

在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,啥问题都没有。

12345678_0001
浏览 100回答 2
2回答

aluckdog

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

小怪兽爱吃肉

每次调用完后要删除local reference才行。env->DeleteLocalRef(java_class);
打开App,查看更多内容
随时随地看视频慕课网APP