Oops, I take it back. That didn't solve the problem.

I can tell you that the access violation occurs on a pointer to an object named Screen which seems to be in Producer.

On Wed, 25 Apr 2007, Keith Parkins wrote:

That did it.

Thanks,
-K

On Wed, 25 Apr 2007, Thrall, Bryan wrote:

 Keith Parkins wrote on Wednesday, April 25, 2007 1:45 PM:
>  I am a bit fuzzy on reference pointers and am not certain why the
>  following is bad although I have a gut feeling as to why.
> > I have a class Derived which is derived from base class MY_D_REF
>  which is a descendant of osg::Referenced. Derived is also a direct
>  decedent of osgGA::GUIEventHandler.
> > class Derived : public MY_D_REF, public osgGA::GUIEventHandler,
>  class MY_D_REF : public osg::Referenced

 osgGA::GUIEventHandler also is derived from osg::Referenced, so you're
 actually inheriting from that class multiple times. Try using virtual
 inheritance.

> > Class MY_D_REF has a callback which uses a this * to pack its callback
>  data:
> > trans->setUserData(this);
>    trans->setUpdateCallback(new MyCallback);
> > //---------------------------------------------------------------
>  class MyCallback : public osg::NodeCallback {
>  public:
>     virtual void operator()(osg::Node *node, osg::NodeVisitor *nv) {
>         osg::ref_ptr<MY_D_REF> wp = dynamic_cast<MY_D_REF*>
>  (node->getUserData());
>    /--- do stuff --/
>         traverse(node, nv);
}
>  When Derived is destroyed at the end of the program, I get an access
>  violation (xmemory's (windoze) destructor template).
> > IF Derived is not derived from both classes, everything is okay. > > or > > IF I take out the callback, everything is okay. > > When I say that everything is okay, I mean the program exits fine. I
>  understand that everything is not in fact okay.
> > Is this because of packing my callback with a this pointer and it's
>  not getting its count decreased? Is that bad mojo? Is there something
>  special I should be doing to decrease the reference the MY_D_REF
>  object in its destructor? I have the destructors protected for the
>  derived classes. Or is this a something that I might run into because
>  multiple ancestors are derived from osg::Referenced? I was worried
>  about a possible circular reference, so I took out reference pointers
>  in the derived classes, but the results were the same.
> > Thanks,
>  Keith

 HTH,




--
Keith Parkins                    U of R Center for Visual Science
[EMAIL PROTECTED]       Meliora Hall, Room 236
office: (585) 275-3938           lab: (585) 275-2230
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to