Assertion-Fehler bei Erzeugung einer Instanz einer abgeleiteten Klasse von QGLWidget



  • Hallo.

    Ich habe mir eine QT-Applikation zusammengebaut, die u.a. aus einem Fenster zur Darstellung einer Szene genutzt wird. Um in diesem Fenster was anzeigen zu können, habe ich mir eine Klasse (class GLWidget) gebaut, die von QGLWidget erbt.

    nun will ich das ganze in meiner MainWindow-Klasse aufrufen. habe dazu das in den header:

    class GLWidget;
    ...
    GLWidget* osgWidget;
    QWorkspace* workspace;
    

    und das in die cpp geschrieben:

    void MainWindow::createCentralWidget()
    {
       osg::ref_ptr<osg::Node> sceneData = osgDB::readNodeFile( "scene.osg" );
       sceneData.get();
       osgWidget = new GLWidget( QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::DirectRendering), 0 );
       osgWidget->showFullScreen();
       osgWidget->setSceneData( sceneData.get() );
    
       workspace = new QWorkspace(this);
       setCentralWidget(workspace);
       workspace->addWindow( osgWidget );
       workspace->showMaximized();
    }
    

    kompiliert wird alles ohne fehler und beim ausführen sehe ich auch mein MainWindow. Allerdings kommt dann sofort ein "Debug Assertion Failed" und damit kann ich irgendwie nicht viel anfangen.

    Debug Assertion Failed!
    Program:...
    File: dbgdel.cpp
    Line: 52

    Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

    ...

    bzw.

    Debug Assertion Failed!
    Program:...
    File: dbgheap.c
    Line: 1132

    Expression: _CrtIsValidHeapPointer(pUserData)

    ...

    Hat jemand von euch schonmal soetwas in der Art gehabt? wie krieg ich raus, woran es liegt, weil debuggen ja irgendwie nicht wirklich geht, da das programm ja ausgeführt wird... ich hab das gefühl, dass es mit dem new-operator was zu tun hat, der ja die instanz auf dem heap erzeugt. aber wie ich das lösen kann, weiß ich noch nicht. würde mich über hilfe sehr freuen. 🙂



  • Hallo,

    sieh mal in deinen Project-Properties nach. Unter dem Ordner C/C++ -> Code Generation. Bei deinen beiden Files, die die Fehler hevorrufen (dbgheap.c dbgdel.cpp) ist als Runtime Libary Multi-treaded Debug DLL (/MDd) eingetragen. Die gleiche Runtime Libary brauchst du in deinem Projekt auch. Jetzt ist nur die Frage warum, ich hab das auch nur erraten, durch rumprobieren eben, bei mir ist der Fehler aber so weggegangen.

    Vielleicht kann uns ja jemand sagen, warum die die gleichen Libaries brauchen?!?

    Mfg,
    Reality2


Anmelden zum Antworten