【发布时间】:2017-12-22 22:00:47
【问题描述】:
我的应用程序使用QNetworkReply 发送和接收来自 RESTful API 的数据。
有很多教程可用于使用QNetworkReply 和QNetworkAccessManager
基本用法:
// 标题
QNetworkAccessManager *manager;
QNetworkReply *myReply;
QMetaObject::Connection conReply;
// 发出请求
void MainWindow::makeRequest(QString url) {
//...
QNetworkRequest request(QUrl(url));
myReply = manager->get(request) // or post(request)
conReply = QObject::connect(myReply, SIGNAL(finished()), this, SLOT(myReplyResponse()));
}
// 处理请求
void MainWindow::myReplyResponse(){
QObject::disconnect(conReply);
QByteArray data = myReply->readAll();
// or QByteArray data = myReply->read(myReply->bytesAvailable());
myReply->deleteLater();
// do something with this data
//...
}
使用类似的实现,我每 X 秒请求一次数据。
问题:
当接收到finished() 信号时,处理回复的代码被触发,但是在读取数据时,我得到一个SIGSEGV。
这个问题似乎是随机发生的,因此我无法确定是什么触发了它。
我们很乐意接受任何建议。
【问题讨论】:
-
您是否通过调试器运行您的应用程序?我假设您正在访问该数据缓冲区中实际上不存在的内存。
标签: c++ qt qnetworkaccessmanager qnetworkreply qnetworkrequest