首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

libxml2 解析xml文档内存泄漏,该如何解决

2013-07-04 
libxml2 解析xml文档内存泄漏我在接收线程中解析从服务器发送过来的xml数据流,解析程序如下:int xml_parse

libxml2 解析xml文档内存泄漏
我在接收线程中解析从服务器发送过来的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多资料也没发现有上面的程序有问题。所以请大家帮忙想想是怎么回事,谢谢了。 内存泄漏 XML
[解决办法]
目测这里没有明显泄露,用valgrind分析一下吧。

热点排行