读书人

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

发布时间: 2013-07-04 11:45:33 作者: rapoo

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分析一下吧。

读书人网 >UNIXLINUX

热点推荐