Странные падения при переходе c Qt 4.4.0 на Qt 4.8.1

212
15 декабря 2016, 16:10

Проблема в следующем.

Есть программа, написанная с 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() );
}

и все. Падения прекратились. Что за дела? Я не понимаю, что происходит.

Есть еще несколько непонятных вещей, но что-то мне подсказывает, корень проблем один.

READ ALSO
Find для string

Find для string

Подскажите, что в этом коде выполняет эта строчка cout<<(i->find("r")==-1Результат на экране 100 не очень понятен, так как у нас в каждом слове есть...

206
Повторный запуск программы

Повторный запуск программы

При повторном запуске результаты поиска не выводятся и не записываются в файлПри первичном все работает

175
Пример реализации классов в UML для C++ кода

Пример реализации классов в UML для C++ кода

Вот что написано: реализация – это способ показать наследование интерфейса в UMLКогда мы говорим, что класс A реализует интерфейс B, это значит,...

209