Hi Henry, In the future please send questions about Xerces-C++ to one of the project's mailing lists instead of to me directly. For technical questions like these c-dev is appropriate (which, BTW, I've CC'ed to my reply).
Wang, Henry (LeftHand Networks) <henry.wa...@hp.com> writes: > Hi. Boris; > My name is Henry Wang, I am with HP Corp. We have a project using > Xerces, and we constantly have memory leak. We use Purify trying to find > where the leak is. Purify always point to ContentSpecNode constructor is > leaking memory. I studied the xerces code and have several questions here. > I appreciate your help in understanding this code. Thanks. > > 1. In ContentSpecNode::ContentSpecNode() constructor, > fElement = new (fMemoryManager) QName(*element); > > this does not allocate memory, just replace memory allready allocated > by FMemoryManager, but then the destructor of ContentSpecNode is: > > delete fElement; > > This will call Standard Library "delete" function. > > Don't we have a mis-match here, the fMemoryManager should be called to > de-allocate memory, right ? QName derives from XMemory which overloads operator delete() to free the memory using the memory manager. See the XMemory implementation for details. > 2. In void TraverseSchema::validateAnnotations() { > > we have: > > ContentSpecNode* left = new (memMgr) ContentSpecNode(appInfoElemDecl, > memMgr); > ContentSpecNode* right = new (memMgr) ContentSpecNode(docElemDecl, memMgr); > ContentSpecNode* root = new (memMgr) > ContentSpecNode(ContentSpecNode::ModelGroupChoice > , left > , right > , true > , true > , memMgr); > > Does the memMgr smart enough to replace different section of memory > for these three consective replacements?, How the delete will work? I am not sure what you mean by these. new (memMgr) ... will allocate the memory block using the memory manager. operator delete () from XMemory will release it. Boris -- Boris Kolpackov, Code Synthesis http://codesynthesis.com/~boris/blog Open-source XML data binding for C++ http://codesynthesis.com/products/xsd XML data binding for embedded systems http://codesynthesis.com/products/xsde Command line interface to C++ compiler http://codesynthesis.com/projects/cli --------------------------------------------------------------------- To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org For additional commands, e-mail: c-dev-h...@xerces.apache.org