####### Qt程序在運行時出現了上述錯誤,並且我的程序出現了數據錯亂的情況,百度后說是因為內存原因,段錯誤,仔細查看了自己的代碼並沒有發現 指針變量未初始化的情況。
####### 通過調試得出原因:QNetworkManager類
,在使用時,可能在同一時間段內QNetworkRequest
的attribute被兩個對象同時設定和使用,導致出現數據錯亂,數據無法正常取出的情況!
####### 解決辦法: 重新建立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)));