【发布时间】:2012-03-05 15:44:18
【问题描述】:
鉴于此 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 手动释放而不扩展它...
【问题讨论】: