Странные падения при переходе c Qt 4.4.0 на Qt 4.8.1
Проблема в следующем.
Есть программа, написанная с Qt 4.4.0. Работала долго, без проблем.
Пересобрал ее с Qt 4.8.1. ОС Ubuntu 12.04.
Cобралось нормально.
Но теперь случаются странные падения.
Пример:
void XEventButton::buttonPressed()
{
XEventButtonProperty* property = static_cast<XEventButtonProperty*> propertyItem->getProperty());
dlg->setupForExec( propertyItem->getValue(), property->getMode() );
dlg->exec();
propertyItem->setValue( dlg->getValue() );
}
Падение происходит в функции dlg->getValue()
. Указатель dlg
вдруг стал равен 0
.
Если ставлю брекпоинт в этом месте, то dlg
уже ненулевой, тогда падает в этой же строке, но потому что propertyItem = 0x20
(propertyItem - указатель).
Изменил код на это:
void XEventButton::buttonPressed()
{
XEventButtonProperty* property = static_cast<XEventButtonProperty*>(propertyItem->getProperty());
XEventButtonPropertyItem* tmp_prop_item = propertyItem;
XEventDialog* tmp_dlg2 = dlg;
dlg->setupForExec( propertyItem->getValue(), property->getMode() );
dlg->exec();
propertyItem = tmp_prop_item;
dlg = tmp_dlg2;
propertyItem->setValue( dlg->getValue() );
}
и все. Падения прекратились. Что за дела? Я не понимаю, что происходит.
Есть еще несколько непонятных вещей, но что-то мне подсказывает, корень проблем один.
Источник: Stack Overflow на русском