The function setAttribute of IXMLDOMElementPtr generate a memory leak
- CXmlDoc is my XML Wrapper class
- m_pXmlCur is a member of type
MSXML2::IXMLDOMElementPtr
- I'm using
#import "MSXML3.dll" named_guids
Here my code :
const int iSize = 10000000;
char *pc = (char*) malloc (iSize+1);
memset (pc, 0x00, iSize+1);
memset (pc, 65, iSize);
//pXmlDoc->SetAttributeVal(_T("Params") , pc);
pXmlDoc->SetAttributeVal2(_T("Params") , pc);
free (pc);
With this methodes :
void CXmlDoc::SetAttributeVal(CString AttrName, CString Val)
{
// Method 1 : does not work
COleVariant cov = Val;
_ASSERTE(m_pXmlCur != NULL);
m_pXmlCur->setAttribute(AttrName.AllocSysString(), cov);
cov.Clear();
}
I tried also this :
void CXmlDoc::SetAttributeVal2(CString AttrName, const char* Val)
{
// Method 2 : does not work
BSTR bstr = SysAllocString(_bstr_t(Val).GetBSTR()); //modify memory leak
CComVariant varText(bstr);
BSTR bstrName =SysAllocString(_bstr_t(AttrName).GetBSTR());
HRESULT hr = m_pXmlCur->setAttribute(bstrName, varText);
SysFreeString(bstr);
bstr = NULL;
SysFreeString(bstrName);
bstrName = NULL;
// Method 3 : does not work
//COleVariant cov = Val;
//_ASSERTE(m_pXmlCur != NULL);
//m_pXmlCur->setAttribute(AttrName.AllocSysString(), cov);
//cov.Clear();
}
My program start with 30Mo and at each pass (creation and destruction of the class using my CXmlDoc class) I Leak 20MB => 30Mo, 50Mo, 70Mo, ...
what is wrong here ?