来自TinyXML ++的奇怪行为

时间:2008-11-01 00:16:15

标签: c++ tinyxml 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声明,我会收到错误:

  

0x7c812aeb处的未处理异常   Drawing.exe:Microsoft C ++异常:   __non_rtti_object @ 0x0012f7b4。

我在这行的dbgheap.c中得到它:

pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);

有什么奇怪的是它适用于Node,我知道那里有元素(我使用TinyXML迭代方法检查过)。

有没有人遇到过这个?

3 个答案:

答案 0 :(得分:1)

只是在黑暗中戳,我不知道tinyxml,但似乎dynamic_cast出错了。 如果你是dynamic_cast&lt;&gt;一个指针,失败时会得到一个NULL指针。但是,如果转换为引用类型,则没有NULL引用的概念,因此运行时会抛出此异常(或bad_type)。 MSDN on dynamic_cast, and why it can go wrong

为发生例外而粘贴的行无助于清除情况,因为它识别症状而不是原因。

尝试识别出错的演员表,如果你走上堆栈并找到tinyxml libs或header中的最后一个方法,你应该能够找到它。然后你可以决定tinyxml是否是worng,或者你只是以错误的方式应用它。

祝你好运!

答案 1 :(得分:1)

如果传递的指针或引用没有指向多态对象,那么

__non_rtti_object由dynamic_cast运算符生成,而不是指向某些垃圾。也许该对象早先被删除了。

逐步调试调试器中的代码,检查dynamic_cast的使用位置以及传递给它的内容。

HTH 帕沃

答案 2 :(得分:0)

项目 - &gt;属性 - &gt; C / C ++ - &gt;语言 - &gt;启用运行时类型信息