本机代码如下所示:
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”的新函数,然后使用该函数来释放“值”。在这一点上,我不确定哪种方法更合适以及我的下一步应该是什么。