【发布时间】:2012-06-30 17:04:12
【问题描述】:
我有一个像follow一样的c++方法(用于java,jni),当我从java(每150ms)重复调用这个时,大约在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;
}
}
【问题讨论】:
-
为什么代码行 // advlib.Release();注释掉了??您是否尝试过将该行用作活动代码的功能?
-
是的,这是原始代码。然后内存溢出。所以我评论它...
-
我认为 CComPtr 不需要手动释放.....
标签: c++ memory com java-native-interface