gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:44:47 25 4
gpt4 key购买 nike

我在使用 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;

关于java - 内存泄漏使用 JNI 将数组从 C++ 发送到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24789988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com