使用JNA时,如果我通过调用Java方法回调收到一个char*值,我该如何释放它?

问题描述 投票:0回答:0

本机代码如下所示:

typedef char *(*getJavaString)();

getJavaString getJavaStringFunc = nullptr;

void registerGetJavaStringFunc(getJavaString func) {
    getJavaStringFunc = func;
}

void someCContextFunc() {
    char* value = getJavaStringFunc();
    // How do I free the value? Can I use `free(value)` directly?
}

我先在Java中调用registerGetJavaStringFunc向C注册一个Java函数,以后会调用getJavaStringFunc函数在C上下文中获取一个值。但是,我怎样才能释放价值?

我最初写的代码是直接释放'value',如下图:

char* value = getJavaStringFunc();
free(value);

这个方法似乎工作得很好。但是,在咨询 ChatGPT 后,我被告知可能存在潜在风险。 ChatGPT 建议我在 C 上下文中注册一个名为“freeJnaValue”的新函数,然后使用该函数来释放“值”。在这一点上,我不确定哪种方法更合适以及我的下一步应该是什么。

c memory-leaks callback java-native-interface jna
© www.soinside.com 2019 - 2024. All rights reserved.