我的项目有关于 xml 解析的问题。我尝试了两个 xml 解析器库(xmlParser 和 TinyXML),它们在相同的代码点出现了相同的错误。一开始我以为是xmlParser的一个bug,但在TinyXML上发现同样的错误后,我想这一定是我的代码的某个点,或者我的理解。我不知道如何解决这个问题。让我详细说一下
这是我使用 xmlParser 截取的代码
XMLResults xe;
printf("%s\n", xmlData); //<XML SUC='1'></XML>
printf("Before parsing XML\n");
XMLNode xMainNode = XMLNode::parseString(xmlData, "XML", &xe);
printf("After parsing XML\n");
if(xe.error!=eXMLErrorNoXMLTagFound) {
bool suc = (bool)atoi(xMainNode.getAttribute("SUC"));
}else {
printf("non-xml data\n");
}
另一个使用 TinyXML 截断
TiXmlDocument xmlDoc;
printf("%s\n", xmlData); //<XML SUC='1'></XML>
printf("Before parsing XML\n");
xmlDoc.Parse(xmlData, 0, TIXML_DEFAULT_ENCODING);
TiXmlElement *xMainElem = xmlDoc.RootElement();
printf("After parsing XML\n");
结果:
<XML SUC='1'></XML>
Before parsing XML
//and then crash
xmlData 是
char xmlData[4096];
这是从套接字'recvfrom()'接收的,我不知道,但它打印正确。上面的代码片段在信号函数中,假设它只有在套接字接收到 xmlData 时才会执行。
它不会在第一个信号(或第一次执行)时崩溃,但在那之后它最终会崩溃,它需要 3 ses - 10 分钟(不可预测)。
正如标题一样,这段代码在 iOS 上运行良好,但在 Mac 上却崩溃了。