当前位置:  技术问答>linux和unix

libxml2 解析xml文档内存泄漏

    来源: 互联网  发布时间:2017-04-11

    本文导语:  我在接收线程中解析从服务器发送过来的xml数据流,解析程序如下: int xml_parse(char *buf,int size, int index) {     int i,len,id;     xmlDocPtr doc;     xmlNodePtr curNode;     doc = xmlParseMemory(buf,size);     if (doc ==...

我在接收线程中解析从服务器发送过来的xml数据流,解析程序如下:

int xml_parse(char *buf,int size, int index)
{

    int i,len,id;
    xmlDocPtr doc;
    xmlNodePtr curNode;

    doc = xmlParseMemory(buf,size);
    if (doc == NULL)
    {
        fprintf(stderr,"Document not parsed successfully.n");
        return -1;
    }
    curNode = xmlDocGetRootElement(doc);        // get root element
    if (NULL == curNode)
    {
        fprintf(stderr,"empty document.n");
        xmlFreeDoc(doc);
        return -1;
    }
    if (xmlStrcmp(curNode->name, BAD_CAST "root"))
    {
        fprintf(stderr,"document of the wrong type, root node != root");
        xmlFreeDoc(doc);
        return -1;
    }

    curNode = curNode->xmlChildrenNode;         // get first child
    while(curNode != NULL)
    {
        if(!xmlStrcmp(curNode->name, BAD_CAST "heart_beat"))
        {
            //heart beat handle
            curNode = curNode->children;
            while(curNode != NULL)
            {
                if(0 == xmlStrcmp(curNode->name,(const xmlChar *) "time"))
                {
                    char *content = (char *)xmlNodeListGetString(doc,curNode->xmlChildrenNode,1);
                    if(content)
                    {
                        printf("recv notify...n");
                        xmlFree(content);
                    }
                     break;
                }
                curNode = curNode->next;
            }
            break;
        }
     curNode = curNode->next;
    }

    xmlFreeDoc(doc);
    xmlCleanupParser();
    return 0;
}

然后,我在另一个线程中定时执行system("busybox free"),我看到的结果是used那一项每执行一次上面的函数used就会增加12kb,这样程序一直运行下去总有一天会把内存消耗完,在网上查了N多资料也没发现有上面的程序有问题。所以请大家帮忙想想是怎么回事,谢谢了。

|
目测这里没有明显泄露,用valgrind分析一下吧。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • libxml2如何保存XML到内存?
  • 如何在HP-UX 11.11下用cc编译libxml2-2.6.23源码,生成64位的libxml2.a库
  • libxml2是针对aix、sco、linux分不同版本还是统一版本?
  • redhat 安装libxml2 make install 时报错
  • 请教一个直接使用libxml2静态库的问题
  • 封装libxml2,那位有经验,请进
  • 在Solaris中如何加入一个动态库 (如 libxml2.so.2)
  • linux ubuntu9.04 libxml2安装问题
  • libxml2 安装的问题!
  • 配置PHP出现的libxml2错误问题
  • linux环境下如何用gcc编译含libxml2的C程序文件?
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • linux下libxml2编译通不过
  • 交叉编译中关于libxml2的问题
  • 谁有xml和libxml2的说明文档,分享一下吧
  • 求助 开源libxml2动态库支持最大长度
  • libxml2可以移植到uclinux下面吗?
  • 有人在aix上装过libxml2吗?取经来了。。
  • libxml2库解析xml文件出现的问题 iis7站长之家
  • 哪位高手指点一下:使用libxml2是否可以动态生成xml文件?
  • libxml2如何才能支持中文


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,