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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Падение при попытке загрузить QPixmap  (Прочитано 3000 раз)
Crazy Sage
Гость
« : Январь 26, 2018, 15:59 »

Есть вот такая функция, которая запускается очень часто

Код:
void Transform::reloadPreview()
{
    QString previewPath=path_;
previewPath=previewPath.replace(previewPath.section("/",-1),"Previews/"+previewPath.section("/",-1));
    if(!QFile::exists(previewPath))
         QFile::copy(QDir::currentPath()+"/blankPreview.jpg",previewPath);
    QPixmap pxmp(previewPath);
    preview_ = pxmp.toImage();
    width_=preview_.width();
    height_=preview_.height();
    width_to_height_=(crop_.width()*width_)/(crop_.height()*height_);
}

в какой-то момент программа вылетает, с сообщением HEAP[PhotoScan.exe]:
Invalid address specified to RtlFreeHeap( 1FF70000, 22A09D98 )
При этом отладчик показывает, что программа стоит на строчке QPixmap pxmp(previewPath);
Память программа вроде при этом не катастрофически жрёт, ненужные картинки выгружаются из памяти.

Соответственно несколько вопросов
1. Знает ли кто-нибудь, чем это может быть вызвано? Смущает то, что вроде никакой очистки кучи здесь нет, а RtlFreeHeap это похоже какая-то очистка памяти. Если проблема в это время летит откуда-то ещё, то как ловить?
2. Если проблема здесь, то как её можно попробовать ловить и обрабатывать? Ставить catch на все исключения как-то сильно грубо наверное.
« Последнее редактирование: Январь 26, 2018, 16:06 от Crazy Sage » Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #1 : Январь 27, 2018, 12:45 »

А зачем лишниее конвертации
Код:
QPixmap pxmp(previewPath);
preview_ = pxmp.toImage();
может сразу в QImage ложить? либо может QPixmap одного достаточно будет для ваших задач.
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Январь 27, 2018, 23:47 »

Transform::reloadPreview в гуишном потоке выполняется?
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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