3

私は次のようなc++メソッド(java、jniの場合)を持っています。これをjavaから(150ミリ秒ごとに)繰り返し呼び出すと、約4時間後になります。メモリオーバーフロー...

JNIEXPORT jint JNICALL Java_nc_mes_pub_hardware_PCI1761_readChanel(JNIEnv *、jobject、jintチャネル){

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;
}

}

4

1 に答える 1

1

問題は次のコード行です。

advlib = NULL;

オブジェクトは、そのadvlib仕事をするために正しい値を必要とします。その値を破棄してNULLに設定すると、正しいインスタンスを解放できなくなります。

コメントを外すadvlib.Release()と、うまくいく可能性があります。しかし、正しい修正は、を削除して、がその仕事を
advlib = NULL;行えるようにすることです。CComPtr

于 2012-06-29T06:48:51.410 に答える