"Pure Virtual Function Call" bei der Verwendung von TinyXml



  • Hallo,

    ich habe ein Problem mit TinyXml.
    Beim laden einer XML File ( TiXmlDocument.Load ("foo.xml") ) schmiert mein Programm mit einem "Pure Virtual Function Call" ab, der Absturz passiert in einer Funktion Parse (data, data.size(), ENCODING).
    Mehrfaches neubauen des Projektes hat nichts gebracht.

    Was ist da los?
    Danke für Hilfe 🙂



  • Zu wenig input...
    Woher weisst du das es iin der Zeile passiert, debugger oder was?



  • Die Funktion Parse ist nicht zufällig von dir oder?



  • Wird das ganze aus nem Konstruktor (einer Basisklasse) aufgerufen?



  • Hoi,

    dass der Fehler in der (TinyXml) Funktion Load passiert weiß ich weil ich ziemlich simple "couts" in den Quellcode der tinyxml geschrieben habe - compilen tu ich die übrigens als Teil meiner Makefile, die Library wird nicht als externe .so Datei o.ä. eingebunden.
    Das ganze wird nicht aus nem Konstruktur aufgerufen, sondern in einer normalen Funktion von mir.

    Was wollt ihr mehr an Informationen haben?



  • Naja... Pure virtual function calls sind mir bis jetzt nur untergekommen, wenn ich abstrakte klassen nicht abgeleitet hatte, bzw. dort irgendwelche Aufrufe nicht implementiert. Ich kenne TinyXML leider zu wenig. Sieht aber für mich nach nem ähnlichen Problem aus...



  • Headhunter schrieb:

    Hoi,

    dass der Fehler in der (TinyXml) Funktion Load passiert weiß ich weil ich ziemlich simple "couts" in den Quellcode der tinyxml geschrieben habe - compilen tu ich die übrigens als Teil meiner Makefile, die Library wird nicht als externe .so Datei o.ä. eingebunden.
    Das ganze wird nicht aus nem Konstruktur aufgerufen, sondern in einer normalen Funktion von mir.

    Was wollt ihr mehr an Informationen haben?

    Hmm ein Stacktrace wäre vielleicht hilfreich. Da du unter Un*x bist, kannst du doch mal valgrind drüberrutschen lassen. Vielleicht ist bis dahin einfach schon der Speicher durch irgendwelche Aktionen zerschossen.
    Wenn das ein Bug in TinyXML sein sollte, versuch es doch mal mit einer Google-Suche. Dann werden sicherlich noch einige andere Leute dieses Problem haben.

    Nachtrag:
    Das passiert aber nicht während der statischen/dynamischen Initialisierung/Deinitialisierung des Programms, oder?



  • Headhunter schrieb:

    compilen tu ich die übrigens als Teil meiner Makefile, die Library wird nicht als externe .so Datei o.ä. eingebunden.

    Hast du es mal als Lib eingebunden?
    Beim kompilieren evtl. irgendwelche "Config-Defines" o.ä. verwürfelt?

    Headhunter schrieb:

    Das ganze wird nicht aus nem Konstruktur aufgerufen, sondern in einer normalen Funktion von mir.

    Das einzige wo ich mir spontan einen "pure virtual function call" vorstellen kann ist dies:

    struct foo
    {
    	virtual ~foo() { doSomething(); }
    	virtual void doSomething() { doAnything(); }
    	virtual void doAnything() = 0;
    };
    
    struct bar : foo
    {
      virtual void doAnything() { std::cout << "whatever\n"; }
    };
    
    int main()
    {
      foo* f = new bar;
      delete f;
    }
    

Anmelden zum Antworten