我正在开发一个最近迁移到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找到它。
如果您遇到同样的问题,并且找到了有效的解决方法,请自行尝试并告诉我们。
答案 0 :(得分:0)
好的,我在Qt bug跟踪器上发布了问题,而here就是答案:QQmlImageProviderBase
派生的对象必须在堆上分配,因为QQmlEngine
取得了它的所有权当它被添加到视图中时...如果它被分配在堆栈上,对象将被删除两次(一次是QQmlEngine,一次是弹出堆栈时)...
在堆上分配它(如建议的那样)并让QQmlEngine
自行删除它可以解决问题。