繁体   English   中英

是否可以从C ++释放分配的内存输出

[英]is it possible to free allocated memory output from C++

我想知道是否可以从C ++中释放返回值。 我在C ++中使用NDK来构建Android本机库。

我想做这样的事情:

在我的C ++代码中:

JNI入口点

JNIEXPORT jbyteArray JNICALL Java_myMethod(JNIEnv * env, jobject obj){
    int len = 16;
    char* buf = (char*) malloc(len);
    jbyteArray array = env->NewByteArray (len);
    env->SetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
    std::thread{&MyClass::asynchronousFree, this, array}.detach();
    return array;
}

还有一个异步调用的方法来释放返回值

void Myclass::asynchronousFree(jbytearray array){
    //code to free the memory after a specified time
}

在我的Android代码中:

void process(){
    byte[] array = ndk.myMethod();
    //do some stuff with the array
    //here i need array erased from memory
}

谢谢你的帮助。

使用C ++进行此操作与使用Java进行相同操作没有什么不同。 这意味着,给定对数组或任何其他Java对象的引用,您不能强制该对象不存在,但可以更改其属性。

对于数组,它的长度是不可变的,但是元素不是。 您的asynchronousFree()方法可以将所有元素设置为0,否则可以指示该数组不再有效。

为了更好地控制这种情况,可以使用任何您喜欢的Java容器,包括最接近数组功能的ArrayList或ByteBuffer。

所有这些对象都支持this或那个clear(),reset()或resize(0)方法,这些方法实际上将释放元素。 与Java中一样,其他一些代码可能仍保留对任何元素的引用。 更糟糕的是,对于您建议的任何数据结构,总有一种方法可以执行“深层复制”并保留要破坏的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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