2 Stimmen

Seltsames Verhalten von TinyXML++

In der Hoffnung, dass einige von euch TinyXML++ Leute können mir helfen. Wirklich, da Sie mir empfohlen haben, bevor ich denke, Sie schulden mir ;)

Ich habe den folgenden 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++;
    }

Wenn ich die obere Deklaration für child verwende, erhalte ich den Fehler:

Unbehandelte Ausnahme bei 0x7c812aeb in Drawing.exe: Microsoft C++-Ausnahme: __non_rtti_object @ 0x0012f7b4.

Und ich bekomme es in dbgheap.c in dieser Zeile:

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

Was seltsam ist, ist es funktioniert mit Node, und ich weiß, dass es Elemente in dort (ich überprüft mit der TinyXML Iteration Methoden).

Ist das schon einmal vorgekommen?

1voto

tabdamage Punkte 260

Ich stochere nur im Dunkeln, ich kenne tinyxml nicht, aber es scheint, dass ein dynamic_cast schief gegangen ist. Wenn Sie dynamic_cast<> einen Zeiger, erhalten Sie einen NULL-Zeiger auf Fehler. Wenn man jedoch auf einen Referenztyp castet, gibt es kein Konzept für eine NULL-Referenz, so dass die Laufzeit diese Ausnahme (oder bad_type) auslöst. MSDN über dynamic_cast, und warum es schief gehen kann

Die Zeile, die Sie für das Auftreten der Ausnahme eingefügt haben, trägt nicht zur Klärung der Situation bei, da sie das Symptom und nicht die Ursache identifiziert.

Versuchen Sie, den Cast zu identifizieren, der falsch gelaufen ist. Sie sollten ihn finden können, wenn Sie den Stack hochgehen und die letzte Methode in den tinyxml-Bibliotheken oder den Headern finden. Dann können Sie entscheiden, ob tinyxml ist worng, oder Sie nur es die falsche Weise angewendet.

Viel Glück!

1voto

paavo256 Punkte 181

__non_rtti_object wird vom dynamic_cast-Operator erzeugt, wenn der übergebene Zeiger oder Verweis nicht auf ein polymorphes Objekt, sondern auf irgendeinen Müll verweist. Vielleicht wurde das Objekt zuvor gelöscht.

Gehen Sie den Code im Debugger durch und prüfen Sie, wo dynamic_cast verwendet wird und was an es übergeben wird.

hth Paavo

0voto

fizzer Punkte 13343

Projekt -> Eigenschaften -> C/C++ -> Sprache -> Laufzeittyp-Info aktivieren

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X