我看了一個例子,我在互聯網上發現了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