Моя программа иногда (с низкой вероятностью) аварийно завершала работу со следующей обратной трассировкой:
Error: signal 11:
/ri/flamingo_console(_Z7handleri+0x174)[0x884a14]
/lib/libc.so.6(__default_sa_restorer_v2+0x0)[0xb5d3de60]
/lib/libc.so.6(memcpy+0x74)[0xb5d94124]
/ri/Qt5.5/lib/libQt5Core.so.5(_ZN7QString11reallocDataEjb+0x8c)
[0xb60f2f68]
/ri/Qt5.5/lib/libQt5Gui.so.5(+0x2f2284)[0xb6923284]
/ri/flamingo_console[0x5f75a8]
/ri/flamingo_console[0x54f6e4]
Я использую инструмент addr2line и нахожу текстовый адрес 0x5f75a8 в следующей функции:
void RElementStyle::drawText( QPainter &painter,
const QRect &rect,
const QString &str,
Qt::AlignmentFlag align )
{
painter.save();
painter.setPen( mCommon.getColor( mStatus, str) );
//! font
QFont font = qApp->font();
font.setPointSize( mCommon.mContentFont.mSize );
painter.setFont( font );
painter.drawText( rect,
align | Qt::AlignVCenter,
str );
painter.restore(); //! this is the crash line 0x54f6e4
}
Я узнаю кое-что о painter.restore () и узнаю, что restore () выдает настройки Painter. Однако я не могу понять, почему восстановление может вызвать ошибку сегмента.Может ли кто-нибудь проанализировать это для меня?Большое спасибо.