首页| 论坛| 消息

标题:求助大牛,windows ce下使用qt程序退出时出现数据异常,那位给瞅瞅!
作者:zarelaky
日期:2011-04-19 20:31
内容:

Data Abort: Thread=87418b3c Proc=81eb6e60 'icmenu.exe'
AKY=00001001 PC=00f3c90c(qtcored4.dll+0x0019c90c) RA=00f3c394(qtcored4.dll+0x0019c394) BVA=1a000000 FSR=00000007
调试后代码中断与QList类的如下代码
inline void detachShared()
{
// The "this->" qualification is needed for GCCE.
if (d->ref != 1 && this->d != &QListData::shared_null)
detach_helper();
}
调用栈:
>qtcored4.dll!QList::detachShared(void) Line: 127, Byte Offsets: 0x18C++
qtcored4.dll!QList::removeAll(QFactoryLoader*& _t = 0x0014d3f0) Line: 663, Byte Offsets: 0x18C++
qtcored4.dll!QFactoryLoader::~QFactoryLoader(void) Line: 209, Byte Offsets: 0x50C++
qtguid4.dll!QFactoryLoader::`scalar deleting destructor'(void) Line: 0, Byte Offsets: 0xffffffffC++
qtguid4.dll!QGlobalStaticDeleter::~QGlobalStaticDeleter(void) Line: 1796, Byte Offsets: 0x5cC++
qtguid4.dll!`loader'::`8'::`dynamic atexit destructor for 'cleanup''(void) Line: 0, Byte Offsets: 0xffffffffC++
qtguid4.dll!doexit(int code = 0x00000000, int quick = 0x00000001, int retcaller = 0x00000000) Line: 36, Byte Offsets: 0x50C
qtguid4.dll!_cexit(void) Line: 66, Byte Offsets: 0x14C
qtguid4.dll!_DllMainCRTStartup(void* hDllHandle = 0x00000000, unsigned long..


#1 [wxj120bw 04-20 00:47]
没有在wince开发过 你这个qt程序一直就用同一个qt版本开发吗
#2 [zarelaky 04-20 08:28]
一开始用4.5.1,现在使用4.6.3,都存在这个问题。
#3 回 2楼(zarelaky) 的帖子 [zarelaky 04-20 17:04]
补充一下,调试发现,是因为qtcore4.dll中qt_factory_loaders()函数内的静态变量先于qtgui4.dll中的QFactoryLoader实例释放,导致QFactoryLoader析构函数中调用qt_factory_loaders()函数返回空指针造成,目前想不出具体的解决办法。那位帮忙看看。。。
QFactoryLoader析构函数:
QFactoryLoader::~QFactoryLoader()
{
QMutexLocker locker(qt_factoryloader_mutex());
qt_factory_loaders()->removeAll(this);
}
#4 Re:回 2楼(zarelaky) 的帖子 [wxj120bw 04-26 01:40]
引用第3楼zarelaky于2011-04-20 17:04发表的 回 2楼(zarelaky) 的帖子 :
补充一下,调试发现,是因为qtcore4.dll中qt_factory_loaders()函数内的静态变量先于qtgui4.dll中的QFactoryLoader实例释放,导致QFactoryLoader析构函数中调用qt_factory_loaders()函数返回空指针造成,目前想不出具体的解决办法。那位帮忙看看。。。
QFactoryLoader析构函数:
QFactoryLoader::~QFactoryLoader()
{
    QMutexLocker locker(qt_factoryloader_mutex());
.......
想知道qt_factoryloader_mutex()函数和qt_factory_loaders()函数分别处理什么 用互斥锁怎么没释放锁

回复 发表
主题 版块