繁体   English   中英

使用JNI将内存泄漏数组从C ++发送到Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM