以下xerces代码是否会导致内存泄漏
will the following xerces code cause a memory leak?
我看了一个在互联网上发现的xerces生成XML的例子。Transcode函数似乎执行一些编码,但它填充的缓冲区从未释放。根据文档,您必须手动发布ti:
注意:返回的缓冲区是动态分配的,调用方负责在不再需要时删除它。您可以调用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();
如果我误解了,请原谅,但您在那里使用的transcode
版本实际上并没有创建或返回任何缓冲区,因为它正在修改您提供的缓冲区(tempStr
)。您的示例代码不会泄漏内存。
执行的transcode
版本返回一个缓冲区(例如,除示例代码块中的版本外的其他版本),使用MemoryManager
实例执行分配。这里的文档似乎有点稀疏,但据我所知,默认的XMLPlatformUtils::fgMemoryManager
没有要求清理它分配的任何内存。因此,您应该假设您需要自己销毁返回的缓冲区。
否,doc->release()
没有释放缓冲区。
正如您引用的文档所说,如果您调用返回代码转换字符串的transcode
函数,则将需要使用XMLString::release()
释放缓冲区:
char *str = XMLString::transcode(someStringVarToBeTranscoded);
XMLString::release(&str);
您的示例不需要这样做,因为您使用的是返回boolean
值的transcode
函数。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏