我有一个c++方法(适用于Java,jni),如下所示,当我从Java(每150毫秒)重复调用此方法时(大约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完成其工作。

关于c++ - 内存溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11257146/

10-10 10:29