Проблема в следующем.
Есть программа, написанная с 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() );
}
и все. Падения прекратились. Что за дела? Я не понимаю, что происходит.
Есть еще несколько непонятных вещей, но что-то мне подсказывает, корень проблем один.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости