Why setAttribute generate a Memory Leak when using IXMLDOMElementPtr

40 Views Asked by At

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 ?

0

There are 0 best solutions below