• 10327阅读
  • 4回复

求助大牛,windows ce下使用qt程序退出时出现数据异常,那位给瞅瞅! [复制链接]

上一主题 下一主题
离线zarelaky
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-19
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<QFactoryLoader *>::detachShared(void) Line: 127, Byte Offsets: 0x18    C++
     qtcored4.dll!QList<QFactoryLoader *>::removeAll(QFactoryLoader*& _t = 0x0014d3f0) Line: 663, Byte Offsets: 0x18    C++
     qtcored4.dll!QFactoryLoader::~QFactoryLoader(void) Line: 209, Byte Offsets: 0x50    C++
     qtguid4.dll!QFactoryLoader::`scalar deleting destructor'(void) Line: 0, Byte Offsets: 0xffffffff    C++
     qtguid4.dll!QGlobalStaticDeleter<QFactoryLoader>::~QGlobalStaticDeleter<QFactoryLoader>(void) Line: 1796, Byte Offsets: 0x5c    C++
     qtguid4.dll!`loader'::`8'::`dynamic atexit destructor for 'cleanup''(void) Line: 0, Byte Offsets: 0xffffffff    C++
     qtguid4.dll!doexit(int code = 0x00000000, int quick = 0x00000001, int retcaller = 0x00000000) Line: 36, Byte Offsets: 0x50    C
     qtguid4.dll!_cexit(void) Line: 66, Byte Offsets: 0x14    C
     qtguid4.dll!_DllMainCRTStartup(void* hDllHandle = 0x00000000, unsigned long int dwReason = 0x00000001, void* lpreserved = 0x00000000) Line: 34, Byte Offsets: 0x60    C
     0x03f8c6b8    
离线wxj120bw

只看该作者 1楼 发表于: 2011-04-20
没有在wince开发过 你这个qt程序一直就用同一个qt版本开发吗
离线zarelaky
只看该作者 2楼 发表于: 2011-04-20
一开始用4.5.1,现在使用4.6.3,都存在这个问题。
离线zarelaky
只看该作者 3楼 发表于: 2011-04-20
回 2楼(zarelaky) 的帖子
补充一下,调试发现,是因为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);      
}
[ 此帖被zarelaky在2011-04-20 17:12重新编辑 ]
离线wxj120bw

只看该作者 4楼 发表于: 2011-04-26
Re:回 2楼(zarelaky) 的帖子
引用第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()函数分别处理什么 用互斥锁怎么没释放锁
快速回复
限100 字节
 
上一个 下一个