title: xerces-c: Xml parsing multiple files
body: <p>I'm atempting to learn xerces-c and was following this tutorial online. </p>
  
  <p><a href="http://www.yolinux.com/TUTORIALS/XML-Xerces-C.html" rel="nofollow">http://www.yolinux.com/TUTORIALS/XML-Xerces-C.html</a></p>
  
  <p>I was able to get the tutorial to compile and run through a memory checker (valgrind) with no problems however when I made alterations to the program slightly, the memory checker returned some potential leak bytes. I only added a few extra lines to main to allow the program to read two files instead of one.</p>
  
  <pre><code>int main()
  {
     string configFile="sample.xml"; // stat file. Get ambigious segfault otherwise.
  
     GetConfig appConfig;
  
     appConfig.readConfigFile(configFile);
  
     cout &lt;&lt; "Application option A="  &lt;&lt; appConfig.getOptionA()  &lt;&lt; endl;
     cout &lt;&lt; "Application option B="  &lt;&lt; appConfig.getOptionB()  &lt;&lt; endl;
  
     // Added code
     configFile = "sample1.xml";
     appConfig.readConfigFile(configFile);
  
     cout &lt;&lt; "Application option A="  &lt;&lt; appConfig.getOptionA()  &lt;&lt; endl;
     cout &lt;&lt; "Application option B="  &lt;&lt; appConfig.getOptionB()  &lt;&lt; endl;
  
     return 0;
  }
  </code></pre>
  
  <p>I was wondering why is it when I added the extra lines of code to read in another xml file, it would result in the following output?</p>
  
  <pre><code>==776== Using Valgrind-3.6.0 and LibVEX; rerun with -h for copyright info
  ==776== Command: ./a.out
  ==776== 
  Application option A=10
  Application option B=24
  Application option A=30
  Application option B=40
  ==776== 
  ==776== HEAP SUMMARY:
  ==776==     in use at exit: 6 bytes in 2 blocks
  ==776==   total heap usage: 4,031 allocs, 4,029 frees, 1,092,045 bytes allocated
  ==776== 
  ==776== 3 bytes in 1 blocks are definitely lost in loss record 1 of 2
  ==776==    at 0x4C28B8C: operator new(unsigned long) (vg_replace_malloc.c:261)
  ==776==    by 0x5225E9B: xercesc_3_1::MemoryManagerImpl::allocate(unsigned long) (MemoryManagerImpl.cpp:40)
  ==776==    by 0x53006C8: xercesc_3_1::IconvGNULCPTranscoder::transcode(unsigned short const*, xercesc_3_1::MemoryManager*) (IconvGNUTransService.cpp:751)
  ==776==    by 0x4038E7: GetConfig::readConfigFile(std::string&amp;) (in /home/bonniehan/workspace/test/a.out)
  ==776==    by 0x403B13: main (in /home/bonniehan/workspace/test/a.out)
  ==776== 
  ==776== 3 bytes in 1 blocks are definitely lost in loss record 2 of 2
  ==776==    at 0x4C28B8C: operator new(unsigned long) (vg_replace_malloc.c:261)
  ==776==    by 0x5225E9B: xercesc_3_1::MemoryManagerImpl::allocate(unsigned long) (MemoryManagerImpl.cpp:40)
  ==776==    by 0x53006C8: xercesc_3_1::IconvGNULCPTranscoder::transcode(unsigned short const*, xercesc_3_1::MemoryManager*) (IconvGNUTransService.cpp:751)
  ==776==    by 0x40393F: GetConfig::readConfigFile(std::string&amp;) (in /home/bonniehan/workspace/test/a.out)
  ==776==    by 0x403B13: main (in /home/bonniehan/workspace/test/a.out)
  ==776== 
  ==776== LEAK SUMMARY:
  ==776==    definitely lost: 6 bytes in 2 blocks
  ==776==    indirectly lost: 0 bytes in 0 blocks
  ==776==      possibly lost: 0 bytes in 0 blocks
  ==776==    still reachable: 0 bytes in 0 blocks
  ==776==         suppressed: 0 bytes in 0 blocks
  ==776== 
  ==776== For counts of detected and suppressed errors, rerun with: -v
  ==776== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2)
  </code></pre>