Проблема в следующем.
Есть программа, написанная с 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() );
}
и все. Падения прекратились. Что за дела? Я не понимаю, что происходит.
Есть еще несколько непонятных вещей, но что-то мне подсказывает, корень проблем один.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, что в этом коде выполняет эта строчка cout<<(i->find("r")==-1Результат на экране 100 не очень понятен, так как у нас в каждом слове есть...
При повторном запуске результаты поиска не выводятся и не записываются в файлПри первичном все работает
Вот что написано: реализация – это способ показать наследование интерфейса в UMLКогда мы говорим, что класс A реализует интерфейс B, это значит,...