文字列へのポインターを保持するネイティブ C 構造体があります。
struct mystruct {
char *name;
}
名前にメモリを割り当てるネイティブ関数:
void fill(struct mystruct *s, int count) {
for (int i = 0; i < count; i++)
s[i].name = strdup("something");
}
対応する Java 構造体とネイティブ メソッドは次のとおりです。
class MyStruct extends Structure {
String name;
}
void fill(MyStruct[] structs, int count)
いくつかのインスタンスを埋めるために使用されます。次に、これを次のように使用します。
MyStruct[] structs = new MyStruct[10];
fill(structs, structs.length);
void free(MyStruct[] structs)
完了したら、配列全体 (strdup によって割り当てられたすべてのメモリ) をクリーンアップするクリーンアップ ルーチンを呼び出す必要があります。構造体のインスタンスごとのメソッドでクリーンアップを行う方法はありません。
私が直面している問題は、配列を解放した後、Java 文字列が壊れていることです。各 MyStruct インスタンスのコピーを作成して、ネイティブ メモリを解放し、純粋な Java 文字列を使用する MyStruct インスタンスだけを処理するにはどうすればよいですか?