TinyXML 的奇怪行为++

发布于 2024-07-07 21:30:26 字数 726 浏览 9 评论 0原文

希望 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++;
    }

如果我使用 child 的顶部声明,我会收到错误:

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

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

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

奇怪的是它与 Node 一起工作,并且我知道其中有元素(我使用 TinyXML 迭代方法进行了检查)。

以前有人遇到过这个吗?

Hoping some of you TinyXML++ people can help me out. Really, since you recomended to me before I think you owe me ;)

I have the following code:

   //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++;
    }

If I use the top declaration for child I get the error:

Unhandled exception at 0x7c812aeb in
Drawing.exe: Microsoft C++ exception:
__non_rtti_object @ 0x0012f7b4.

And I get it in dbgheap.c at this line:

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

What's weird is it works with Node, and I know that there are elements in there(I checked using the TinyXML iteration methods).

Has anyone run into this before?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小巷里的女流氓 2024-07-14 21:30:26

只是在黑暗中摸索,我不知道tinyxml,但似乎dynamic_cast出了问题。
如果您使用dynamic_cast<> 一个指针,失败时你会得到一个 NULL 指针。 但是,如果转换为引用类型,则不存在 NULL 引用的概念,因此运行时会抛出此异常(或 bad_type)。 MSDN 上的dynamic_cast,以及为什么会出错

您为发生异常而粘贴的行无助于解决问题,因为它识别的是症状而不是原因。

尝试识别出错的转换,如果您沿着堆栈向上查找并在tinyxml库或标头中找到最后一个方法,您应该能够找到它。 然后您可以确定tinyxml是否已磨损,或者您只是以错误的方式应用了它。

祝你好运!

just poking in the dark, i don't know tinyxml, but it seems that a dynamic_cast went wrong.
If you dynamic_cast<> a pointer, you get a NULL-pointer on failure. However, if you cast to a reference type, there is no concept of a NULL-reference, so the runtime throws this exception (or bad_type). MSDN on dynamic_cast, and why it can go wrong

The line you pasted for the exception to occur does not help to clear up the situation, since it identifies the symptom rather than the cause.

Try to identify the cast that went wrong, you should be able to find it if you walk up the stack and find the last method in tinyxml libs or headers. Then you can decide whether tinyxml is worng, or you just applied it the wrong way.

good luck!

浊酒尽余欢 2024-07-14 21:30:26

如果传递的指针或引用不指向多态对象,而是指向一些垃圾,则 __non_rtti_object 由dynamic_cast 运算符生成。 也许该对象之前已被删除。

单步执行调试器中的代码并检查在何处使用了dynamic_cast以及传递给它的内容。


帕沃

__non_rtti_object is generated by the dynamic_cast operator if the passed pointer or reference does not point to a polymorphic object, but to some garbage instead. Maybe the object had been deleted earlier.

Step through the code in the debugger and check where the dynamic_cast is used and what is passed to it.

hth
Paavo

°如果伤别离去 2024-07-14 21:30:26

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

Project -> Properties -> C/C++ -> Language -> Enable Run-Time Type Info

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文