Учитывая этот код C ++:
void LoadData(char** myVar)
{
std:: string str("[Really Long String Here]");
unsigned int size = str.length() + 1;
*myVar = new char[size];
strncpy(*myVar, str.c_str(), size);
}
И этот JNA Java:
Pointer myVar = new Memory(Pointer.SIZE);
this.Lib.LoadData(myVar);
this.someVar = myVar.getPointer(0).getString(0);
У меня возникают утечки памяти, насколько я понимаю, getPointer (0) должен создатьобъект указателя, который должен быть освобожден при finalize (), но, похоже, его нет.
Я что-то упустил?Это похоже на спецификацию ... и я могу запустить вышеописанную функцию без утечек в C ++ нормально.
Я вызываю код Java в цикле, чтобы проверить утечку, я попытался поставить паузы, ивручную вызывая GC, и таким образом он довольно быстро раздуется до гигабайтов.
Я уже несколько дней бьюсь головой об этом, и это отстой, когда я зацикливаюсь на чем-то столь тривиальном, как попыткаосвободить память. Насколько я могу судить, я могу только вручную освободить память в Java, если у меня есть адрес, но я не могу понять, как я могу это получить.
Редактировать:
Не бери в голову, я даже не думаю, что есть способ сделать бесплатно вручную через JNA, не расширяя его ...