[英]Memory leak sending array from C++ to Java with JNI
我遇到了问题,要发送大量int数据,这些数据会使用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 ++中做数组的指针,有什么建议吗?
在C ++中,您要创建一个新的int [],但不要删除它。
尝试这个:
int *pIntArray = getData();
env->SetIntArrayRegion(buffer, 0, frame_size, (const jint *) pIntArray );
delete[] pIntArray;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.