请教个内存泄漏的问题

LONG OnCommRead_ReadDevice_2(LPOLESTR keyStr,INT TYPE)
{
LONG retValue=0;
LPDWORD lpdwLength;
lpdwLength = new DWORD[1];
lpdwLength[0] = 1;
// 参数4
LPDWORD lpdwValue;
lpdwValue = new DWORD[1]; //??????
LONG SetDevice_lRet = 0;
hr = m_pezDevice->ReadDevice(lpdwLength,&lpdwValue,&SetDevice_lRet);
if (hr != S_OK)
{
// 在未连接的情况下,
wprintf(L"Can't ReadDevice Y! Error Code = 0x%x¥n",SetDevice_lRet);
mintTcpQAFlag++;
retValue= 2;
}
else
{
wprintf(L"ReadDevice Y OK! \n");
wprintf(L"\n");
//retValue=(LONG)*lpdwValue; // 便于向外面传递数据
}
delete[] lpdwLength;
delete[] lpdwValue;

lpdwLength=NULL;
lpdwValue=NULL;

return retValue;

}

运行后发现内存泄漏 ,是这个变量,如何解决?

lpdwValue 有对应的释放,是不是还有其他地方没有释放了。并不一定是这个位置。

用boundschecker 检查下
http://blog.csdn.net/duanbeibei/article/details/37698985

详解:
从你的代码看,函数 m_pezDevice->ReadDevice 的第2个参数应该是个指向指针的指针,在此应该是“LPDWORD *”,
由于你只需要取1个设备的相关信息,按照以下修改即可。
1、将行“lpdwValue = new DWORD[1]; //??????”修改为 “lpdwValue = NULL” 或 “lpdwValue = 0”。
2、将行“delete[] lpdwValue;”修改为“if(lpdwValue){delete[] lpdwValue;}”。
注意,如果函数m_pezDevice->ReadDevice内部,是使用malloc()函数的返回值来设置lpdwValue的话,则第2点中需要修改为
“if(lpdwValue){free(lpdwValue);}”。即new和delete要匹配,malloc和free要匹配,请自行检查。

多提一点:
如果需要取多个(大于1个)设备的相关信息,则不能这样修改。如果是这种情况你需要修改lpdwValue的类型,及其初始化方式,及其释放方式,这里不详述。