[Interest] App crashing because of ImageProvider when exiting
sergio.martins at kdab.com
Wed Jul 25 13:20:04 CEST 2018
The docs for QQmlEngine::addImageProvider() say: "The QQmlEngine takes
ownership of provider".
So QQmlEngine::removeImageProvider() is calling free() on stack
variable, hence it complains that address wasn't heap allocated.
Create it on the heap as suggested by Jean-Michaël.
Sérgio Martins | sergio.martins at kdab.com | Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel: Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - The Qt, C++ and OpenGL Experts
On 2018-07-25 11:59, Nuno Santos wrote:
> This is the main context. It will not get out until app.exec()
> That’s why I’m connecting to aboutToQuit signal in order to remove the
> provider from the Qml engine.
> I had the provider instantiated inside the controller but I was having
> this problem already, therefore my efforts in getting it fixed.
> QQmlApplicationEngine *e;
> int main(int argc, char *argv)
> QGuiApplication app(argc, argv);
> Controller controller;
> QQmlApplicationEngine engine;
> e = &engine;
> ImageProvider imageProvider;
> engine.addImageProvider("pictures", &imageProvider);
> QObject::connect(&app, &QGuiApplication::aboutToQuit, [=]()
> return app.exec();
> Any ideas?
>> On 25 Jul 2018, at 11:30, Jean-Michaël Celerier
>> <jeanmichael.celerier at gmail.com> wrote:
>> Shouldn't you allocate your ImageProvider on the heap or at least
>> ensure that it survives during the whole execution ? here it will be
>> deleted by the end of your function
>> Jean-Michaël Celerier
>> http://www.jcelerier.name <http://www.jcelerier.name/>
>> On Wed, Jul 25, 2018 at 11:24 AM, Nuno Santos
>> <nunosantos at imaginando.pt <mailto:nunosantos at imaginando.pt>> wrote:
>> Yesterday I have used for the first time a QQuickImageProvider but I’m
>> having problems because now the app crashes when I terminate it.
>> Tried to do the following in order to avoid the crash but it is
>> crashing anyway:
>> ImageProvider imageProvider;
>> engine.addImageProvider("pictures", &imageProvider);
>> QObject::connect(&app, &QGuiApplication::aboutToQuit, [=]()
>> The crash is always something like this:
>> malloc: *** error for object 0x7ffeef34e900: pointer being freed was
>> not allocated
>> Does anyone knows how to fix this?
More information about the Interest