我有一些 C 代码实现了一个 JNI 方法,jobject
以便在调用时返回给 Java。在 C 代码中,我使用了一个struct
看起来有点像这样的东西:
typedef struct {
char* something
int somethingElse
} awesomeStruct;
在 C 库中,我malloc
为 struct 和char*
.
jobject
在 JNI 方法的末尾返回时,我会执行以下操作:
awesomeStruct *mystruct = getResult();
jstring somethingString;
jint somethingElseInt;
somethingString = (*env)->NewStringUTF(env,mystruct->something);
somethingElseInt = mystruct->somethingElse;
ret = (*env)->NewObject(env,javaClass,method,somethingString, somethingElseInt);
return ret;
希望这应该使用字符串的两个参数和结构中的 int调用method
方法。javaClass
鉴于对 struct 和 char 数组做getResult()
了 a malloc
,我该如何释放它?如果我尝试在 return 语句中mystruct
或之前释放,我会收到错误,我猜这是由于返回对象包含对一旦我调用 free 就不再存在的事物的引用。mystruct->something
Debug assertion Failed - CrtlsValidHeapPointer
我该如何阻止这种泄漏?