Qt 5.3.0:关闭QQuickView时,进程崩溃抱怨QQmlImageProviderBase中的free()

时间:2014-06-12 07:27:13

标签: qt qt5 qt-quick

我正在开发一个最近迁移到Qt 5.3.0的项目(以前它在Qt 5.2.1上运行)。

我的项目基于QQuickView对象,其中包含一些QML文件,具体取决于我从通信协议中收到的一些命令...

自从我使用Qt 5.2.1以来,该系统运行良好且坚如磐石:绝不是问题。现在使用Qt 5.3.0,如果我关闭QQuickView窗口,则进程崩溃并输出以下内容:

  

**检测到glibc ** / home / morix / devel / aesys / VLED / build / bin / VLED:free():指针无效:0x091ec694 **

     

======= Backtrace:=========

     

/lib/i386-linux-gnu/libc.so.6(+ 0x75ee2)[0xb5c1fee2]   /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb5e1b51f]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN21QQmlImageProviderBaseD0Ev+0x24)[0xb7136110]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(+0x211f59)[0xb713cf59]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(+0x2138b3)[0xb713e8b3]   /opt/Qt/5.3/gcc/lib/libQt5Core.so.5(_ZN9QHashData11free_helperEPFvPNS_4NodeEE+0x4a)[0xb5f40e7a]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN17QQmlEnginePrivateD1Ev+0x8ab)[0xb71378c5]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN17QQmlEnginePrivateD0Ev+0x1c)[0xb7137a7c]   /opt/Qt/5.3/gcc/lib/libQt5Core.so.5(_ZN7QObjectD1Ev+0x6a1)[0xb6173031]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN9QJSEngineD1Ev+0x36)[0xb70352b6]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN10QQmlEngineD1Ev+0xf0)[0xb71398fe]   /opt/Qt/5.3/gcc/lib/libQt5Qml.so.5(_ZN10QQmlEngineD0Ev+0x1c)[0xb71399e2]   /opt/Qt/5.3/gcc/lib/libQt5Core.so.5(_ZN14QObjectPrivate14deleteChildrenEv+0x6c)[0xb616e4ac]   /opt/Qt/5.3/gcc/lib/libQt5Core.so.5(_ZN7QObjectD1Ev+0x661)[0xb6172ff1]   /opt/Qt/5.3/gcc/lib/libQt5Gui.so.5(_ZN7QWindowD2Ev+0x6d)[0xb646a7bd]   /opt/Qt/5.3/gcc/lib/libQt5Quick.so.5(_ZN12QQuickWindowD1Ev+0xd9)[0xb74878e9]   /opt/Qt/5.3/gcc/lib/libQt5Quick.so.5(_ZN10QQuickViewD1Ev+0x9a)[0xb753925a]   /家庭/ morix / devel的/ aesys / VLED /编译/斌/ VLED [0x8059bbe]   /家庭/ morix / devel的/ aesys / VLED /编译/斌/ VLED [0x8059c8f]   /家庭/ morix / devel的/ aesys / VLED /编译/斌/ VLED [0x8051368]   /家庭/ morix / devel的/ aesys / VLED /编译/斌/ VLED [0x804d429]   /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb5bc34d3]   /家庭/ morix / devel的/ aesys / VLED /建造/ bin中/ VLED [0x804d2b1]

(VLED是我上面输出中项目的名称)。

似乎QQmlImageProviderBase中的一些free()调用正在处理一个无效的指针......

请考虑在我的项目中,我使用QQmlImageProviderBase派生类来提供一些&#34; live&#34; pixmaps到QML ...但我不认为问题存在:代码非常简单(只返回一些先前插入本地集合中的pixmaps),而且使用Qt 5.2.1它工作正常... < / p>

我正在研究Ubuntu Linux 12.04 LTS ...但是如果我为BeagleBone Black / TI AM335x交叉编译应用程序问题是相同的...所以它似乎不是一个与环境相关的&#34; #34;问题,而是一个Qt问题...

Qt 5.3.0是否有其他人遇到过这样的问题?任何解决方法?

更新

我为复制问题创建了一个非常简单的项目:可以在here找到它。

如果您遇到同样的问题,并且找到了有效的解决方法,请自行尝试并告诉我们。

1 个答案:

答案 0 :(得分:0)

好的,我在Qt bug跟踪器上发布了问题,而here就是答案:QQmlImageProviderBase派生的对象必须在堆上分配,因为QQmlEngine取得了它的所有权当它被添加到视图中时...如果它被分配在堆栈上,对象将被删除两次(一次是QQmlEngine,一次是弹出堆栈时)...

在堆上分配它(如建议的那样)并让QQmlEngine自行删除它可以解决问题。