crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

antake
  опции профиля:
сообщение 19.7.2013, 9:18
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 19.7.2013
Пользователь №: 3883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день!

Есть контейнер qset<qulonglong>. Когда выполняю команду clear();, получаю сигнал SIGABRT и программа вылетает. Неполадки в библиотеках qt, как будто освобождается незанятая память.

При этом, когда выполняю следующий код:
    foreach( qulonglong hash, errorHashes ) {
        if ( hash < ( qulonglong ) 1000 ) {
            bool contains = errorHashes.contains( hash );
        }
    }


,то в множестве появляется хеш со значением 32 ( таких маленьких чисел там не может быть ), contains дает на нем false. И именно после 32 и происоходит вылет.

Посоветуете что-нибудь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 3)
Алексей1153
  опции профиля:
сообщение 19.7.2013, 11:53
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ничего не вылетает, я даже специально попробовал на всякий случай ) Собственно, в показанном куске кода вылетать принципиально нечему - проблема где-то в твоём не показанном коде. Где-то портишь память контейнера

#include <QSet>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);




    QSet <qulonglong> errorHashes;

    errorHashes.insert(1);
    errorHashes.insert(2);
    errorHashes.insert(3);

    foreach( qulonglong hash, errorHashes )
    {
        if ( hash < ( qulonglong ) 1000 )
        {
            bool contains = errorHashes.contains( hash );
        }
    }

    errorHashes.clear();
...
...


и ещё
Цитата
Qt automatically takes a copy of the container when it enters a foreach loop. If you modify the container as you are iterating, that won't affect the loop. (If you do not modify the container, the copy still takes place, but thanks to implicit sharing copying a container is very fast.)


в момент копирования уже косячного контейнера и происходит ещё какая-то дополнительная бяка
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
antake
  опции профиля:
сообщение 19.7.2013, 12:30
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 19.7.2013
Пользователь №: 3883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Очевидно, что ничего не вылетать не будет, если попробовать это в таком виде)
И портится памяти тоже принципиально негде.

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

Я теперь делаю clear в другом месте, пока работает. Не знаю, что случилось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.7.2013, 12:34
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


antake, сомневаюсь, что это баг Qt . Лучше сразу разобраться, а то потом фокусы начнутся, совсем непонятно будет, что падает и где

>>И портится памяти тоже принципиально негде.
затереть память контейнера можно запросто
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 16.7.2025, 16:59