libxml2 — C ++, libxslt: освобождение документа таблицы стилей после освобождения таблицы стилей приводит к сбою

Я использую libxml2 с libxslt для обработки XML из программы на C ++. Для преобразования XML-документов с помощью XSL я использую следующую функцию (обработка ошибок удалена):

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 говорит: free (): неверный указатель: 0x00000000026d8090 *) во второй последней строке.

Я не могу найти никаких намеков в документах, что xsltFreeStylesheet также освобождает базовый документ или что-то в этом роде, так что здесь не так?

0

Решение

xsltFreeStylesheet также освобождает базовый документ или что-то

Прекрасное руководство есть некоторые намеки, которые предполагают, что есть вероятность того, что этот сценарий случится.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]