java – JNA内存泄漏
发布时间:2020-05-25 16:31:48 所属栏目:Java 来源:互联网
导读:鉴于此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);
|
鉴于此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而不扩展它… 解决方法将此函数添加到C库…void FreeData(char** myVar)
{
delete [] *myVar;
}
然后将其作为JNA代码 Pointer myVar = new Memory(Pointer.SIZE); this.Lib.LoadData(myVar); this.someVar = myVar.getPointer(0).getString(0); this.Lib.FreeData(myVar); 这样就可以在C中分配和删除内存. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
