Вы можете точно определить причину этого, перейдя по этой ссылке http://rapidxml.sourceforge.net/manual.html#classrapidxml_1_1parse__error
В частности (жирным шрифтом выделен мой текст)
класс rapidxml :: parse_error
Определено в rapidxml.hpp
Описание
Исключение ошибки разбора. Это исключение выдается анализатором при ошибке
происходит. Используйте функцию what () для получения понятного человеку сообщения об ошибке. использование
где () функция для получения указателя на позицию в исходном тексте, где
ошибка была обнаружена.
это, по крайней мере, позволит вам выяснить, что является причиной исключения, а также местоположение. Кроме того, у вашего кода есть проблема, которая может вызвать проблемы. Это взято из rapidXML-описания функции разбора http://rapidxml.sourceforge.net/manual.html#classrapidxml_1_1xml__document_8338ce6042e7b04d5a42144fb446b69c_18338ce6042e7b04d5a42144fb446b69c
жирный текст выделен мной
Анализирует завершенную нулем строку XML в соответствии с заданными флагами. Прошло
строка будет изменена парсером, если только
Используется флаг rapidxml :: parse_non_destructive. Строка должна сохраняться
на весь срок действия документа . В случае ошибки,
Будет создано исключение rapidxml :: parse_error.
Но в вашем коде
xml_document<> doc;
doc.parse<parse_full>(buffer);
// doc.parse<0>(buffer);
delete [] buffer;
cout << "The first node is '" << doc.first_node()->name() << "'\n";
вы удаляете буфер символов, содержащий вашу строку, а затем вызываете функции для объекта doc
. Это является нарушением вышеуказанной документации. Я не уверен, является ли это точной причиной вашего исключения, но, безусловно, удаление этого буфера вызовет проблемы. Я бы предложил использовать блок try / catch, чтобы перехватить исключение parse_error, а затем использовать функции where()
и what()
, чтобы точно определить ошибку. Также попробуйте переместить оператор delete в конец вашего кода после того, как вы полностью завершите вызов функций для объекта doc
, так как это также может вызвать проблемы.