我有一个本地 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结构和native方法是
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 分配的内存)。没有办法对 struct instance-by-instance 方法进行清理。
我面临的问题是释放数组后,Java 字符串已损坏。如何为每个 MyStruct 实例创建一个副本,以便我可以释放本机内存,并且只处理使用纯 Java 字符串的 MyStruct 实例?