[PyQt] Segfault with QString

Phil Thompson phil at riverbankcomputing.com
Fri Mar 21 12:32:46 GMT 2008


On Friday 21 March 2008, Filip Gruszczyński wrote:
> > This is the same issue that came up the other day in the context of
> > events. The QString that value is wrapping is a temporary, so you either
> > need to convert it (as you do when calling str()) or copy it (by calling
> > QString()).
>
> Could you explain it a bit further or send me to a proper
> documentation? I would like to understand it better, so I would really
> appreciate some clear explanation.

When PyQt wraps a const reference to a QString it just saves the address of 
that QString in the Python object. If the QString is then destroyed the 
pointer becomes invalid and may segfault if it is subsequently dereferenced. 
The solution is to copy the QString before it is destroyed.

A better solution might be for PyQt to automatically copy such things when 
wrapping them. This would also avoid another problem where it is possible to 
modify a const C++ instance from Python. I haven't yet convinced myself that 
such a change will be safe (ie. won't break existing code).

Phil



More information about the PyQt mailing list