如何从 Libxml2 库中释放结构 xmlSAXHandler
How to free structure xmlSAXHandler from Libxml2 library
我使用 libxml2 库创建了一个 SAX 验证器。
这是我如何创建它:
void OnStartElementNs(
void *ctx,
const xmlChar *localname,
const xmlChar *prefix,
const xmlChar *URI,
int nb_namespaces,
const xmlChar **namespaces,
int nb_attributes,
int nb_defaulted,
const xmlChar **attributes) {}
void OnEndElementNs(
void* ctx,
const xmlChar* localname,
const xmlChar* prefix,
const xmlChar* URI) {}
void OnCharacters(void *ctx, const xmlChar *ch, int len)
{
char chars[len + 1];
strncpy(chars, (const char *)ch, len);
chars[len] = ' ';
}
xmlSAXHandler make_sax_handler ()
{
xmlSAXHandler SAXHander;
memset(&SAXHander, 0, sizeof(xmlSAXHandler));
SAXHander.initialized = XML_SAX2_MAGIC;
SAXHander.startElementNs = OnStartElementNs;
SAXHander.endElementNs = OnEndElementNs;
SAXHander.characters = OnCharacters;
return SAXHander;
}
xmlSAXHandler mySAXHandler = make_sax_handler();
所以我得到了一个 xmlSAXHandler 对象,如果我想释放内存,我可以自由地释放每个变量,就像使用 xmlFree(xmlChar*( 一样。我是XML和libxml2的新手,所以我想知道是否有一种方便的方法来释放整个结构。
谢谢!
您必须自己管理xmlSAXHandler
结构的分配。 libxml2 不提供函数来做到这一点。在您的示例中,您将返回指向堆栈分配结构的指针。这不起作用,并且可能会使您的程序在某个时候崩溃。若要使代码正常工作,应使用 malloc
在堆上分配 xmlSAXHandler
结构,并在不再需要时使用 free
释放它。
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 包含矢量指针的结构的内存释放问题
- 如何安全地停止 IOCP WSARecv() 任务,并释放 WSAOVERLAPED 结构?
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 释放包含多个向量的结构的内存
- 释放指向保留嵌套变量内存地址的结构的指针
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- std::unordered_map 如何释放使用 malloc 创建的结构.是否需要对地图进行 2 次查询
- 数据结构中的双重释放或损坏
- 用C++11中的智能指针包装旧的C结构并自动释放它们
- 释放包含STL类的链接列表结构的内存
- 如何在C++中释放结构和对象的数组
- C++在结构初始化后释放内存
- 释放组合结构内存的正确方法
- wlanapi-将WlanFreeMemory释放其WLAN_INTERFACE_INFO数组结构
- C++释放结构使用的所有内存
- 释放包含恶意字符串的 malloc'd 结构
- 如何将shared_ptr与指向不应释放的结构的指针一起使用
- 如何从 Libxml2 库中释放结构 xmlSAXHandler
- 如何释放一个结构体的内存,每次循环迭代的指针