Позволяет исследовать доказательства ...
#6 0x95c5a14b in std::terminate ()
Я могу сказать, что это вызывается, когда деструктор создает исключение. Деструкторы, выбрасывающие исключения - это большое нет-нет. Ксерсес может делать что-то нехорошее.
Или это может быть вызвано этой строкой
#7 0x95c5a6da in __cxa_pure_virtual ()
где что-то может отсутствовать в таблице виртуальных функций. Возможно, один из деструкторов членов объекта DOM? Возможно, это создает исключение?
Эта ссылка предлагает отличное объяснение того, что может привести к сбою поиска в виртуальной таблице. Вкратце, это может быть вызвано висящим указателем базового класса, висящим вокруг кого-то, пытающегося вызвать полиморфную функцию для этого указателя.
Пример приведен по ссылке выше:
// From sample program 5:
AbstractShape* p1 = new Rectangle(width, height, valuePerSquareUnit);
std::cout << "value = " << p1->value() << std::endl;
AbstractShape* p2 = p1; // Need another copy of the pointer.
delete p1;
std::cout << "now value = " << p2->value() << std::endl;
Говоря о висячих указателях, похоже, что XercesDomParser содержит объекты, которые вы обновили:
errHandler = (ErrorHandler*) new HandlerBase();
xmlParser->setErrorHandler( errHandler )
но позже удалено / выпущено
// Clean up
XMLString::release( &xmlMetadata );
xmlDoc->release();
delete xmlParser;
delete memBufIS;
delete errHandler;
Может ли порядок уничтожения вещей быть неправильным и вызывать некоторые из вышеперечисленных проблем? На первый взгляд, все выглядит хорошо, но здесь я бы поэкспериментировал и дважды проверил документацию о том, как все должно быть снесено.