我有一個symbian Qt應用程序接收GPS數據,將其存儲到數據庫並嘗試將其發佈到服務器。前兩步工作正常,但連續發佈要麼崩潰我的應用程序或殺死我的互聯網連接。連續上傳導致QNetworkReply錯誤「無法分配內存」
我已經修改了我的應用程序以進行調試,因此它只在每10秒內向服務器發佈數據。應用程序運行良好大約45-90分鐘沒有任何顯着的內存增加。
在那之後,我會得到QNetworkReply一個錯誤說「無法分配內存」。
同一時間的內存使用增加大約63500(字節?)。
在接下來的上傳我會得到答覆,說「無效的socket描述符」,之後我QtCreator調試輸出充滿「異常在7會做setdefaultif(0) - 破解]」
有人知道這裏出了什麼問題嗎?我無法從我的上傳代碼中找到可能導致此問題的錯誤。
這是我的上傳腳本。
void MainWindow::upload() {
//Content of postData below. Using same data on every upload now when tracking the bug
//[{"timestamp":"2010-10-01T17:10:27","latitude":62.1823321,"longitude":25.73226825,"user":6}]
QByteArray postData;
QNetworkRequest request;
request.setUrl(uploadUrl);
this->qnam->post(request, postData);
}
void MainWindow::serviceRequestFinished(QNetworkReply* reply) {
QByteArray bytes = reply->readAll();
if (reply->error() == QNetworkReply::NoError)
{
//nothing in here when debugging
} else {
qDebug() << "-------Reply error: " + reply->errorString();
}
reply->deleteLater();
updateHeapStats();
}
void MainWindow::updateHeapStats() {
#ifdef Q_OS_SYMBIAN
TInt mem, size, limit;
User::Heap().AllocSize(mem);
size = User::Heap().Size();
limit = User::Heap().MaxLength();
qDebug() << "**DEBUG MEMORY - > Memory: " << QString::number(mem);
qDebug() << "**DEBUG MEMORY - > Heap limit: " << QString::number(limit);
qDebug() << "**DEBUG MEMORY - > Heap size: " << QString::number(size);
#endif
}
總而言之,我已經用諾基亞N97mini,5230和5800測試了這一點,它們的表現都一樣。
編輯。忘了提及,當互聯網連接「死亡」,我仍然可以看到3G已打開,但通過網絡瀏覽器連接到互聯網失敗。當我關閉應用程序並嘗試使用瀏覽器連接到互聯網時,它顯示「Web:Memory full,...」(來自應用程序的網絡請求正常工作)我使用的是諾基亞能源分析器,它沒有顯示任何內存跡象已滿。即使測試了這一點,並開始了2場比賽,ovi地圖和其他大量應用程序,即使它們消耗了超過40MB的內存,它們也能正常運行。
感謝您的回覆。忘了提及但是測試瞭如果回覆被刪除,並且它在requestFinished函數之後每次都執行。只有在函數調用之間運行的是具有10秒超時的QTimer。我認爲應用程序從用戶可以定義的堆中收到大量內存,用戶也可以設置最大數量的堆可以增長的大小。我不完全確定自己是否正確,因爲沒有太多處理內存問題 – Harmiih 2010-10-04 10:39:47