我有一个用于 symbian 的 Qt 应用程序,它接收 gps 数据,将其存储到数据库中并尝试将其发布到服务器。前两个步骤可以正常工作,但连续发布会使我的应用程序崩溃或中断我的互联网连接。
我出于调试目的修改了我的应用程序,因此它仅每 10 秒将数据发布到服务器。应用程序运行良好约 45-90 分钟,没有任何显着的内存增加。
在那之后,我会从 QNetworkReply 收到一个错误,说"Cannot allocate memory"。
同时内存使用量增加了大约 63500(字节?)。
在下一次上传时,我会收到“无效的套接字描述符”的回复,然后我的 QtCreator 调试输出充满了“7 上的异常 [将执行 setdefaultif(0) - hack]”
有人知道这里出了什么问题吗?我无法从我的上传代码中找到可能导致此问题的错误。
这是我的上传脚本。
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:内存已满,...”(来自应用程序的 Web 请求工作正常)我正在使用诺基亚能源分析器,它没有显示任何内存迹象满。甚至对此进行了测试并启动了 2 个游戏、ovi 地图和大量其他应用程序,即使它们消耗了超过 40MB 的内存,它们也能正常工作。