在调试Webservice程序时(vc++,vs2005,ATL方式),调用后总有内存泄漏,刚开始以为是自己的指针分配问题,更改了多种方式没有结果,还是MSDN啊,一小段代码就说明了问题。这个内存是ATL分配的,但需要我们来管理,见红字部分,自己清理一下就好了,真说不清是该感谢微软还是该咒骂他,你的事儿凭什么我来做?
CTranslatorWebServiceT<CSoapSocketClientT<>> *wsObj=new CTranslatorWebServiceT<CSoapSocketClientT<>>();
CComBSTR hiResult;
CComBSTR a=m_strIn;
BSTR *p;
int nsize;
HRESULT hr = S_OK;
CoInitialize(NULL);
hr=wsObj->getEnCnTwoWayTranslator(a,&p,&nsize);
if(FAILED(hr)){
MessageBox(L"调用失败");
}
else
{
m_strOut+=m_strIn+L"/r/n";
for(int i=0;i<nsize;i++){
m_strOut+=CString(p[i])+L"/r/n";
}
m_strOut+=L"-----------------/r/n";
UpdateData(false);
}
AtlCleanupArray(p, nsize); //清理由webservice 生成的指针
free(p);//释放由Webservice 分配的内存
delete wsObj;
CoUninitialize();