Russian Qt Forum
Сентябрь 28, 2024, 18:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: qvector.h, line 489: Out of memory  (Прочитано 30416 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #45 : Ноябрь 18, 2014, 10:56 »

Этот большой, на котором вылет происходит, тоже хорошо, но только с выводом минимум в три колонки.

При наличии большего числа колонок (что уменьшает количество строк. в данном случае втрое) предотвращает ошибку. Это дает право сказать, что QByteArray тут не при чем
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #46 : Ноябрь 18, 2014, 10:57 »

Сейчас посмотрел в хирер qvector.h - та строчка относится к реалоку. то есть, у тебя какое-то перераспределение памяти, на котором происходит падение...
Нехватка памяти, полагаю
In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 489: Out of memory
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #47 : Ноябрь 18, 2014, 10:58 »

Сама вьюха тоже, наверное, на векторах стоит
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #48 : Ноябрь 18, 2014, 11:01 »

Попробуй еще утечки поискать памяти.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #49 : Ноябрь 18, 2014, 11:09 »

Попробуй еще утечки поискать памяти.

Визуально я это проделал. И моё эго подсказывает, что я очень щепетильно расходую память Улыбающийся
Специальным софтом ни разу не пользовался. Посоветуете бесплатную? (Работаю в QtCreator, но есть и MSVS 2013 x64)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #50 : Ноябрь 18, 2014, 11:13 »

valgrind, но это только под Линухом.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #51 : Ноябрь 18, 2014, 11:33 »

valgrind, но это только под Линухом.

Жаль. Мне линукс ставить отказываются (как и vm), а дома не вариант.

Мне повезло повторить ошибку в минимально компилябельном примере (см. аттач)!
Всё что нужно - открыть файл свыше 120Мб (но из-за readAll не более 250). Будет точно такой же вылет.
Мелкие файлы читаются на ура.
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #52 : Ноябрь 18, 2014, 11:41 »

Пробежавшись в дебаге по тестовому примеру из сообщения (это где rowCount = 990000000),
можно увидеть, что падение происходит в функции (qbytearray.cpp):
Код
C++ (Qt)
int qAllocMore(int alloc, int extra)
{
   Q_ASSERT(alloc >= 0 && extra >= 0);   // line: 72        alloc = -669934592
...
}
 
причем вызывается функция из (qarraydata.cpp):
Код
C++ (Qt)
   if (options & Grow)
       capacity = qAllocMore(int(objectSize * capacity), int(headerSize)) / int(objectSize);     // line: 97
 
где: objectSize = sizeof(QHeaderViewPrivate::SectionItem) = 8 и capacity = 990000000

вывод 1: возможно есть баг в том, что в функцию qAllocMore передается размер в int (даже не в uint). Надо разбираться
вывод 2: для отображения большого количества данных необходимо писать свой View
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #53 : Ноябрь 18, 2014, 11:49 »

Пробежавшись в дебаге по тестовому примеру из сообщения (это где rowCount = 990000000),
можно увидеть, что падение происходит в функции (qbytearray.cpp):
......
вывод 1: возможно есть баг в том, что в функцию qAllocMore передается размер в int (даже не в uint). Надо разбираться
вывод 2: для отображения большого количества данных необходимо писать свой View

То зависание, скорее всего, не относится к моей проблеме. Так совпало, что мне удалось и его выявить Улыбающийся
qAllocMore у меня тоже один раз выскочила с ошибкой, наверное открыл файл чуть больше обычного.

для отображения большого количества данных можно добавить колонки и размазать данные по ним, уменьшив количество строк, но это только для моей истиной проблемы. Как увеличение колонок и уменьшение строк поведут себя в том проекте - не проверял.

В предыдущем сообщении проблема, которая реально стоит в моем проекте.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #54 : Ноябрь 18, 2014, 11:52 »

Можно еще попробовать заюзать QAbstract* модель и вьюху.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #55 : Ноябрь 18, 2014, 11:53 »

То зависание, скорее всего, не относится к моей проблеме. Так совпало, что мне удалось и его выявить Улыбающийся
qAllocMore у меня тоже один раз выскочила с ошибкой, наверное открыл файл чуть больше обычного.
То зависание будет отрабатывать в релизной версии с отключенными ASSERT
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #56 : Ноябрь 18, 2014, 11:57 »

Можно еще попробовать заюзать QAbstract* модель и вьюху.

К сожалению, я ещё малоопытен чтобы превращать QAbstract во что-то визуальное типа вьюхи.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #57 : Ноябрь 18, 2014, 11:58 »

Попробуй для начала реализовать можель не от TableModel, а от абстрактной.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #58 : Ноябрь 18, 2014, 12:11 »

В предыдущем сообщении проблема, которая реально стоит в моем проекте.
Все та же проблема, одним большим непрерывным куском память не выделяется.
Попробуйте читать файл кусками или воспользоваться методами QFile::map, QFile::unmap в модели унаследованной от QAbstractItemModel
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #59 : Ноябрь 18, 2014, 12:24 »

Все та же проблема, одним большим непрерывным куском память не выделяется.
Под хранение данных из файла в QByteArray у меня все выделяется. Не совсем понимаю, как метод хранения данных может повлиять на представление.
Если же не прикручивать модель к представлению и открыть все тот же файл, то все откроется без ошибок.
В этом можно убедиться на примере из моего прошлого сообщения
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.177 секунд. Запросов: 23.