Russian Qt Forum

Qt => Общие вопросы => Тема начата: Crazy Sage от Январь 26, 2018, 15:59



Название: Падение при попытке загрузить QPixmap
Отправлено: 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 на все исключения как-то сильно грубо наверное.


Название: Re: Падение при попытке загрузить QPixmap
Отправлено: Vladimir от Январь 27, 2018, 12:45
А зачем лишниее конвертации
Код:
QPixmap pxmp(previewPath);
preview_ = pxmp.toImage();
может сразу в QImage ложить? либо может QPixmap одного достаточно будет для ваших задач.


Название: Re: Падение при попытке загрузить QPixmap
Отправлено: Kurles от Январь 27, 2018, 23:47
Transform::reloadPreview в гуишном потоке выполняется?