zoukankan      html  css  js  c++  java
  • Qt程序运行时出现Error

    ####### Qt程序在运行时出现了上述错误,并且我的程序出现了数据错乱的情况,百度后说是因为内存原因,段错误,仔细查看了自己的代码并没有发现 指针变量未初始化的情况。
    ####### 通过调试得出原因:QNetworkManager类,在使用时,可能在同一时间段内QNetworkRequestattribute被两个对象同时设定和使用,导致出现数据错乱,数据无法正常取出的情况!
    ####### 解决办法: 重新建立QNetworkManager分别针对不同的对象,这样它们attribute的使用区域不会重叠
    我编写这个函数的部分代码如下:

       // 请求开始
    void Request::get(void *attribute, QUrl url)
    {
        QNetworkRequest request(url);
        request.setAttribute(QNetworkRequest::Attribute(QNetworkRequest::User + 1), QVariant::fromValue(attribute));
        this->get(request);
    }
    
        // 请求完成
        QVariant attribute = request.attribute(QNetworkRequest::Attribute(QNetworkRequest::User + 1));
        if(attribute.isNull())
        {
            emit dataRequested(receivedData);
        }
        else
        {
            void * attributePointer = attribute.value<void *>();
            emit dataRequested(attributePointer, receivedData);
        }
    
     // 出错位置 
        // attribute首先在这里被占用
        void *widgetAttribute = (void *)homeMovieItem;
        this->homeImgRequest->get(widgetAttribute, QUrl(homeItem->imgPath));
        connect(this->imgRequest, SIGNAL(dataRequested(void*,QByteArray)), this, SLOT(onReceivedItemImg(void*,QByteArray)));
        // 这里attribute再次被占用
        void *widgetAttribute = (void *)actressWidgetItem;
        this->actressImgRequest->get(widgetAttribute, QUrl(actressItem->imgPath));
        connect(this->imgRequest, SIGNAL(dataRequested(void*,QByteArray)), this, SLOT(onReceivedActressImg(void*,QByteArray)));
    
  • 相关阅读:
    策略模式Strategy
    flex项目
    模板方法Template Method
    timer与ScheduledExecutorService
    java两个字符串的相似度
    一个简单的webshell
    状态模式State
    Java性能优化
    责任链模式China of Responsibility
    ns2.34下mflood协议的完美移植
  • 原文地址:https://www.cnblogs.com/During/p/12380200.html
Copyright © 2011-2022 走看看