Учитывая этот код 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 в цикле, чтобы проверить утечку, я пробовал делать паузы и вручную вызывать сборщик мусора, и таким образом он довольно быстро раздуется до гигабайт
. уже несколько дней, и это отстой, чтобы зацикливаться на чем-то столь тривиальном, как попытка освободить память. Насколько я могу судить, я могу только вручную освободить память в Java, если у меня есть адрес, но я не вижу, как я
Редактировать:
Неважно, я даже не думаю, что есть способ сделать это вручную через JNA без расширения...