Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Memory leak

Memory leak

Scheduled Pinned Locked Moved C / C++ / MFC
databasetestingbeta-testingxmlperformance
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    suresh_sathya
    wrote on last edited by
    #1

    Hi i tried to reduce my memory leak.I reduced that,but still only few bytes of memory leak.I checked everything,but still i cant find.Pl anybody can help.Thanks in advance. HRESULT hr; IXMLDOMDocument2 *pIXMLDOMDocument2=NULL; IXMLDOMNodeList *pIXMLDOMNodeList=NULL; IXMLDOMNode *pIXMLDOMNode=NULL,*pIXMLDOMNode1=NULL; IXMLDOMNamedNodeMap *pIXMLDOMNamedNodeMap1 = NULL; VARIANT_BOOL boolvalue; long Tablelen; CComVariant Tablename; hr = CoInitialize(NULL); hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&pIXMLDOMDocument2); CComVariant varValue="testing.xml"; if (FAILED(hr)) return(hr); if(SUCCEEDED(hr)) { hr=pIXMLDOMDocument2->load(varValue,&boolvalue); pIXMLDOMDocument2->selectNodes((_bstr_t)"DATABASE/TABLE[@Left]",&pIXMLDOMNodeList); pIXMLDOMNodeList->get_length(&Tablelen); HWND hListBox=GetDlgItem(hDlg,IDC_LIST); pIXMLDOMNodeList->reset(); for(int i=0;i< Tablelen;i++) { pIXMLDOMNodeList->get_item(i,&pIXMLDOMNode); pIXMLDOMNode->get_attributes(&pIXMLDOMNamedNodeMap1); pIXMLDOMNode->Release(); pIXMLDOMNode=NULL; pIXMLDOMNamedNodeMap1->getNamedItem((_bstr_t)"Name",&pIXMLDOMNode1); pIXMLDOMNode1->get_nodeValue(&Tablename); SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)(char *)(_bstr_t)Tablename); pIXMLDOMNode1->Release(); pIXMLDOMNode1=NULL; pIXMLDOMNamedNodeMap1->Release(); pIXMLDOMNamedNodeMap1=NULL; } CHECK_AND_RELEASE(pIXMLDOMDocument2); CHECK_AND_RELEASE(pIXMLDOMNode1); CHECK_AND_RELEASE(pIXMLDOMNodeList); CHECK_AND_RELEASE(pIXMLDOMNode); CHECK_AND_RELEASE(pIXMLDOMNamedNodeMap1); } CoUninitialize();

    M 1 Reply Last reply
    0
    • S suresh_sathya

      Hi i tried to reduce my memory leak.I reduced that,but still only few bytes of memory leak.I checked everything,but still i cant find.Pl anybody can help.Thanks in advance. HRESULT hr; IXMLDOMDocument2 *pIXMLDOMDocument2=NULL; IXMLDOMNodeList *pIXMLDOMNodeList=NULL; IXMLDOMNode *pIXMLDOMNode=NULL,*pIXMLDOMNode1=NULL; IXMLDOMNamedNodeMap *pIXMLDOMNamedNodeMap1 = NULL; VARIANT_BOOL boolvalue; long Tablelen; CComVariant Tablename; hr = CoInitialize(NULL); hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument2, (void**)&pIXMLDOMDocument2); CComVariant varValue="testing.xml"; if (FAILED(hr)) return(hr); if(SUCCEEDED(hr)) { hr=pIXMLDOMDocument2->load(varValue,&boolvalue); pIXMLDOMDocument2->selectNodes((_bstr_t)"DATABASE/TABLE[@Left]",&pIXMLDOMNodeList); pIXMLDOMNodeList->get_length(&Tablelen); HWND hListBox=GetDlgItem(hDlg,IDC_LIST); pIXMLDOMNodeList->reset(); for(int i=0;i< Tablelen;i++) { pIXMLDOMNodeList->get_item(i,&pIXMLDOMNode); pIXMLDOMNode->get_attributes(&pIXMLDOMNamedNodeMap1); pIXMLDOMNode->Release(); pIXMLDOMNode=NULL; pIXMLDOMNamedNodeMap1->getNamedItem((_bstr_t)"Name",&pIXMLDOMNode1); pIXMLDOMNode1->get_nodeValue(&Tablename); SendMessage(hListBox,LB_ADDSTRING,0,(LPARAM)(char *)(_bstr_t)Tablename); pIXMLDOMNode1->Release(); pIXMLDOMNode1=NULL; pIXMLDOMNamedNodeMap1->Release(); pIXMLDOMNamedNodeMap1=NULL; } CHECK_AND_RELEASE(pIXMLDOMDocument2); CHECK_AND_RELEASE(pIXMLDOMNode1); CHECK_AND_RELEASE(pIXMLDOMNodeList); CHECK_AND_RELEASE(pIXMLDOMNode); CHECK_AND_RELEASE(pIXMLDOMNamedNodeMap1); } CoUninitialize();

      M Offline
      M Offline
      MaximE 0
      wrote on last edited by
      #2

      Jesus!!! Does this code work??? (_bstr_t)"DATABASE/TABLE[@Left]" What is this? Never, never do like this. Do: _bstr_t(OLESTR("DATABASE/TABLE[@Left]")) pIXMLDOMNode->Release(); pIXMLDOMNode=NULL; It's not bad, but pIXMLDOMNode = 0 is enough. (LPARAM)(char *)(_bstr_t)Tablename Should be: reinterpret_cast<LPARAM>(static_cast<TCHAR*>(_bstr_t(Tablename))) Such a bad cast should be explicit. pIXMLDOMNode->get_attributes(&pIXMLDOMNamedNodeMap1); You are working with very smart pointer. Instead, do like this: pIXMLDOMNamedNodeMap1 = pIXMLDOMNode->attributes; What is: CHECK_AND_RELEASE(pIXMLDOMDocument2); May be it a: #define CHECK_AND_RELEASE(x) x->AddRef() I don't know. Summary. 1. Never, never use c-casts (like (_bstr_t)x, (LPARAM)y, etc). They are the worst evil, unless you damn sure that you do. It's very hard to find a bug in a such code. 2. Read about _com_ptr_t. Learn how it's intended to use. 3. Avoid macros. 4. Optional, but strongly recommended. Get a Stroustrup.

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups