我之前曾经成功使用过xmlTextReaderGetAttribute(来自xmlsoft.org),但是API文档要求我取消分配返回的xmlChar*。现在,我的应用程序在对free()的第二次调用(第一次传递null)时崩溃,如下所示:

xmlTextReaderPtr reader = null;
xmlChar *attribVal = null;
//blah...
if (xmlTextReaderAttributeCount(reader) > 0) {
    free((attribVal));

attribVal = xmlTextReaderGetAttribute(reader, (const xmlChar*)"super-Attrib");
if (xmlStrcasecmp(attribVal, (const xmlChar*)"monoMega-Attrib") == 0) {
    free((attribVal));

我的项目使用C++,但libxml2和xmlsoft.org中的所有示例均使用标准C。

最佳答案

直接使用xmlFree()而不是free():

xmlTextReaderPtr reader = null;
xmlChar *attribVal = null;
//blah...
if (xmlTextReaderAttributeCount(reader) > 0)
{
    attribVal = xmlTextReaderGetAttribute(reader, BAD_CAST "super-Attrib");
    if (attribVal)
    {
        ...
        xmlFree(attribVal);
    }
}

08-16 21:50