当前位置: 技术问答>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数据流,解析程序如下:
然后,我在另一个线程中定时执行system("busybox free"),我看到的结果是used那一项每执行一次上面的函数used就会增加12kb,这样程序一直运行下去总有一天会把内存消耗完,在网上查了N多资料也没发现有上面的程序有问题。所以请大家帮忙想想是怎么回事,谢谢了。
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分析一下吧。