内存溢出?

Memory overflow?

本文关键字:溢出 内存      更新时间:2023-10-16

我有一个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;
}

}

问题是这行代码:

advlib = NULL;

advlib对象需要正确的值才能完成其工作。通过销毁其值并将其设置为 NULL,它无法再释放正确的实例。

取消注释advlib.Release()可能会使其正常工作。但正确的解决方法是删除
advlib = NULL;并允许CComPtr完成其工作。