jobject
呼び出されたときに Java に戻る JNI メソッドを実装する C コードがいくつかあります。C コードでは、struct
次のような a を少しいじっています。
typedef struct {
char* something
int somethingElse
} awesomeStruct;
C ライブラリではmalloc
、構造体とchar*
.
JNI メソッドの最後でを返す場合はjobject
、次のようにします。
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 の 2 つのパラメーターを使用してmethod
メソッド onを呼び出す必要があります。javaClass
getResult()
struct と char 配列に対してaを行うとすれば、malloc
これを解放するにはどうすればよいですか? return ステートメントのいずれかmystruct
またはその前に解放しようとすると、エラーが発生します。これは、return オブジェクトに、free を呼び出すと存在しなくなったものへの参照が含まれているためだと思います。mystruct->something
Debug assertion Failed - CrtlsValidHeapPointer
この漏れを止めるにはどうすればよいですか?