您的位置:首页 > 编程语言

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()不会对程序产生任何影响。

 小弟是新手,如果有什么不对的地方,欢迎大家指出!

 谢谢!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  内存泄露 xml c语言