[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