我有一个c++方法(对于java,jni),当我从java (每隔150ms)重复调用这个方法时,大约在4个小时后。内存溢出...
JNIEXPORT jint JNICALL Java_nc_mes_pub_hardware_PCI1761_readChanel (JNIEnv *,jobject,jint channel){
HRESULT hr ;
CLSID clsid;
hr = CLSIDFromProgID(L"AdvDIO.AdvDIOCtrl", &clsid);
CComPtr<IAdvDIO> advlib;
hr = advlib.CoCreateInstance(clsid);
if ( SUCCEEDED( hr ) )
{
advlib->DeviceNumber = 0;
if(advlib->DeviceNumber < 0){
return -100;
}
int i =advlib->ReadDiChannel( channel );
// advlib.Release();
advlib = NULL;
return i;
}
else
{
return -1;
}}
发布于 2012-06-29 14:48:51
问题是下面这行代码:
advlib = NULL;advlib对象需要正确的值才能完成其工作。通过销毁它的值并将其设置为NULL,它不能再释放正确的实例。
取消对advlib.Release()的注释可能会让它正常工作。但正确的修复方法是删除
advlib = NULL;并允许CComPtr执行其工作。
https://stackoverflow.com/questions/11257146
复制相似问题