我看了一个例子,我在互联网上发现了xerces生成XML。 Transcode函数似乎执行一些编码,但它填充到的缓冲区永远不会被释放。根据文档,您必须手动发布ti:下面的xerces代码会导致内存泄漏吗?
注意:返回的缓冲区是动态分配的,并且调用方负责在不再需要时删除它。你可以调用XMLString :: release来释放这个返回的缓冲区。
可以doc-> release释放内存?
XMLCh tempStr[100];
XMLString::transcode("Range", tempStr, 99);
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr, 0);
XMLString::transcode("root", tempStr, 99);
DOMDocument* doc = impl->createDocument(0, tempStr, 0);
DOMElement* root = doc->getDocumentElement();
XMLString::transcode("FirstElement", tempStr, 99);
DOMElement* e1 = doc->createElement(tempStr);
root->appendChild(e1);
XMLString::transcode("SecondElement", tempStr, 99);
DOMElement* e2 = doc->createElement(tempStr);
root->appendChild(e2);
doc->release();
因此,如果我调用两次相同的缓冲区上的转码,只有一次调用释放它会导致内存泄漏? – godzilla 2012-07-31 16:00:23
@godzilla:在你的例子中,你不需要担心释放缓冲区。你的缓冲区'tempStr [100]'被分配在**栈**上。一旦这个函数超出范围,缓冲区将被释放。 – 2012-07-31 16:02:14
@godzilla:我也更新了我的答案,以澄清事情。 – 2012-07-31 16:03:23