Странное поведение от TinyXML++
Надеюсь, что некоторые из вас, TinyXML++, могут мне помочь. На самом деле, так как вы рекомендовали мне, прежде чем я думаю, что вы должны мне;)
У меня есть следующий код:
//ticpp::Iterator< ticpp::Element > child( "SetPiece" );
ticpp::Iterator< ticpp::Node > child("SetPiece");
GLuint lc_SPieces = 0;
for(child = child.begin( this ); child != child.end(); child++ )
{
lc_SPieces++;
}
Если я использую объявление top для child, я получаю ошибку:
Необработанное исключение в 0x7c812aeb в Drawing.exe: исключение Microsoft C++: __non_rtti_object @ 0x0012f7b4.
И я получаю это в dbgheap.c в этой строке:
pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);
Что странно, так это то, что он работает с Node, и я знаю, что там есть элементы (я проверял, используя итерационные методы TinyXML).
Кто-нибудь сталкивался с этим раньше?
3 ответа
__non_rtti_object
генерируется оператором dynamic_cast, если переданный указатель или ссылка указывают не на полиморфный объект, а на какой-то мусор. Возможно объект был удален ранее.
Пройдите по коду в отладчике и проверьте, где используется dynamic_cast и что ему передается.
hth Пааво
Просто тыкаю в темноте, я не знаю tinyxml, но кажется, что dynamic_cast пошёл не так. Если вы используете dynamic_cast<> указатель, вы получите NULL-указатель при ошибке. Однако если вы приведете к ссылочному типу, концепция NULL-ссылки отсутствует, поэтому среда выполнения выдает это исключение (или bad_type). MSDN на dynamic_cast, и почему это может пойти не так
Строка, которую вы вставили для возникновения исключения, не помогает прояснить ситуацию, поскольку она определяет симптом, а не причину.
Попытайтесь определить, какой актерский состав был ошибочным, вы сможете найти его, если подойдете к стеку и найдете последний метод в библиотеках tinyxml или заголовках. Затем вы можете решить, работает ли tinyxml, или вы просто применили его неправильно.
удачи!
Проект -> Свойства -> C/C++ -> Язык -> Включить информацию о времени выполнения