On Fri, 24 Feb 2012 17:13:11 +0100, Jonathan Kleinehellefort <j...@molb.org> wrote: > Hallo, > > I was asked to debug memory corruption problem in some sip-based Python > bindings, and what I found leads me to believe that sip is to blame. > I'll try to explain the problem: > > Let's say you have a C++ class that looks like this: > > struct C { M m; }; > > And then let's assume there is some Python code that accesses m after > its containing c object is no longer referenced by Python, for example: > > C().m > > The Python wrapper for m will then point inside the *deleted* c object, > leading to memory corruption. > > I have a more complete example at > > http://molb.org/~jk/siptest.tar.gz > > First of all, I think this should be considered a bug in sip, since it > easily can result in memory corruption, while there is not even a > warning or even a mention of this problem in the documentation. It > might even be better for sip to refuse generating code for accessing > members. > > What I would like happen in this case is that when the m wrapper is > created, the reference count for the c wrapper would be increased, and a > reference to c is stored in m, so that c can be dereferenced when m is > deleted. > > However, I'm not sure how to achieve this. I looked at the ownership > stuff but I don't think this will help me. So I'm asking for help on > how to fix or work around this problem.
Fixed in tonight's snapshot. Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt