C++,libxslt:在释放样式表之后释放样式表文档会导致崩溃



我使用libxml2和libxslt从C++程序进行XML处理。为了用XSL转换XML文档,我使用了以下函数(删除了错误处理):

xmlDocPtr
transformXmlDocument(
    const xmlDocPtr inputDocument,
    const std::string& stylesheetString
    ) {
    exsltRegisterAll();
    // Read the stylesheet document.
    xmlDocPtr stylesheetDocument = xmlReadMemory(
            stylesheetString.c_str(),
            stylesheetString.length(),
            "stylesheet.xsd",
            0, // No encoding set - get it from the file header.
            0  // No further options.
    );
    // Parse the stylesheet
    xsltStylesheetPtr stylesheet = xsltParseStylesheetDoc(stylesheetDocument);
    // Transform the document
    xmlDocPtr result = xsltApplyStylesheet(stylesheet, inputDocument, 0);
    // Free used resources
    xsltFreeStylesheet(stylesheet);
    xsltCleanupGlobals();
    // Here the program crashes
    xmlFreeDoc(stylesheetDocument);
    return result;
}

问题是,该程序在最后一行出现访问冲突(glibc says:free():无效指针:0x00000000026d8090*)而崩溃。

我在文档中找不到xsltFreeStylesheet也释放底层文档或其他内容的任何提示,那么这里出了什么问题?

xsltFreeStylesheet还释放底层文档或其他东西

精细的手册中有一些提示,表明这种情况确实有可能发生。

相关内容

  • 没有找到相关文章

最新更新