libxml编程--内存泄露
2015-10-11 11:36
176 查看
最近在项目中使用到了libxml函数库,使用过程中用valgrind进行检测的时候发现了一些内存泄露。
主要是两个问题,现整理如下。
1.xmlGetProp函数
调用这个函数会返回一个xmlChar类型的指针,这里动态分配了内存,这个指针使用完成之后一定
要记得使用函数xmlFree手动删除动态分配的内存。还有其它函数也会和这个函数一样返回xmlChar*,
使用时要注意。
xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST
"attribute");
......
xmlFree(szAttr);
2.xmlCleanParser函数
我是在主线程中处理一个xml文档,在子线程中去处理另外一个xml文档。主线程在处理完
xml文档之后退出时调用了这个函数,发生了很严重的内存泄露。
网上查资料说使用xmlCleanParser函数需要注意一下几点:
(1)xmlCleanupParser()在线程中被调用时,先结束的进程会把共享内存清除,接
下来尚未结束的的线程就无法正确访问.
(2)xmlCleanupParser()应该在主线程中被调用,在不再使用libxml2库时,一般在程序的出口处.
这里需要注意一个问题,如果你无法确定其他用户是否还在使用libxml2库,那么就不要调用
xmlCleanupParser(),因为这样最差的情况是浪费了一块内存,直至在程序结束时才能被收回。
所以xmlCleanupParser()一般是在进程结束的时候调用,在进程(所有进程结束之后)多次调用
xmlCleanupParser()不会对程序产生任何影响。
小弟是新手,如果有什么不对的地方,欢迎大家指出!
谢谢!
主要是两个问题,现整理如下。
1.xmlGetProp函数
调用这个函数会返回一个xmlChar类型的指针,这里动态分配了内存,这个指针使用完成之后一定
要记得使用函数xmlFree手动删除动态分配的内存。还有其它函数也会和这个函数一样返回xmlChar*,
使用时要注意。
xmlChar* szAttr = xmlGetProp(propNodePtr,BAD_CAST
"attribute");
......
xmlFree(szAttr);
2.xmlCleanParser函数
我是在主线程中处理一个xml文档,在子线程中去处理另外一个xml文档。主线程在处理完
xml文档之后退出时调用了这个函数,发生了很严重的内存泄露。
网上查资料说使用xmlCleanParser函数需要注意一下几点:
(1)xmlCleanupParser()在线程中被调用时,先结束的进程会把共享内存清除,接
下来尚未结束的的线程就无法正确访问.
(2)xmlCleanupParser()应该在主线程中被调用,在不再使用libxml2库时,一般在程序的出口处.
这里需要注意一个问题,如果你无法确定其他用户是否还在使用libxml2库,那么就不要调用
xmlCleanupParser(),因为这样最差的情况是浪费了一块内存,直至在程序结束时才能被收回。
所以xmlCleanupParser()一般是在进程结束的时候调用,在进程(所有进程结束之后)多次调用
xmlCleanupParser()不会对程序产生任何影响。
小弟是新手,如果有什么不对的地方,欢迎大家指出!
谢谢!
相关文章推荐
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- Lua和C语言的交互详解
- C#针对xml基本操作及保存配置文件应用实例
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理
- C#通过DataSet读写xml文件的方法
- C#实现基于XML配置MenuStrip菜单的方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数