【发布时间】:2014-09-07 12:35:47
【问题描述】:
我在使用 JNI 发送大量从 C++ 到 Java 不断更新的整数数据时遇到问题。数据正确发送到java,但是在java或JNI中存在内存泄漏,但我实际上只是将数据处理到一个新的int数组,所以我不知道错误在哪里。
int * intArray = new int [frame_size];
int * getData(){
return intArray;
}
这是 JNI 代码
JNIEXPORT jintArray JNICALL Java_JNIData_InData_getData
(JNIEnv * env, jobject obj)
{
Data* dataOut;
jclass cls = env->GetObjectClass(obj);
jfieldID fid = env->GetFieldID(cls, "ptr", "J");
dataOut = (Data *) env->GetLongField(obj, fid);
jintArray buffer = env->NewIntArray(frame_size);
env->SetIntArrayRegion(buffer, 0, frame_size, (const jint *)dataOut->getData());
env->DeleteLocalRef(cls);
return buffer;
}
在java中我只有以下代码:
void processData(){
int [] val = getData();
}
如果我评论getData(),则没有内存泄漏。我想我必须在 C++ 中做数组的指针,有什么建议吗?
【问题讨论】:
-
当然会泄漏内存。如果您要拨打
new[],您在哪里拨打delete[]? C++ 不是 Java。
标签: java c++ memory-leaks java-native-interface