私有变量udpSocket在程序运行结束之前就被释放,请各位帮忙看一下
下述是我的程序,只要实现可以收包就可以,但是在逻辑没有任何问题的情况下,每次运行到recv_slot()就会出问题,在win7系统下显示是程序异常退出,放入win xp系统下显示的就是内存不能为read,经过一段时间的研究,发现,这个问题的主要原因是:在"recv_slot()"中的udpSocket是一个没有初始化的指针,但是这个私有变量明明已经在构造函数中初始化了,为什么还会出现这样的问题,请各位帮忙看一下,谢谢class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
//~Dialog();
private slots:
void recv_slot();
private:
QUdpSocket *udpSocket;
};
Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
QUdpSocket *udpSocket = new QUdpSocket(this);
bool ff=udpSocket -> bind(QHostAddress::LocalHost,8000);//9000是监听的端口
if(ff)
{
qDebug()<< "bingding success";
}
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(recv_slot()));
}
void Dialog::recv_slot(){
qDebug()<< "recv_slot";
QByteArray datagram;
qint64 len=udpSocket->readDatagram(datagram.data(), 4096,
0,0);//由于这个udpSocket没有初始化,所以程序总是异常退出
qDebug()<< len;
} 异常 --------------------编程问答-------------------- 自己顶一下 --------------------编程问答--------------------
你的udpSocket是一个局部变量,怎么可以在函数之外访问呢?
楼主需要去巩固下C/C++的基础知识
你要用局部变量也没有问题,qt的信号槽机制提供了一个寻找信号发射者的函数sender();
你的槽函数可以写成:
void Dialog::recv_slot(){
qDebug()<< "recv_slot";
QByteArray datagram;
QUdpSocket *udpSocket = qobject_cast<QUdpSocket *>(this->sender());
qint64 len=udpSocket->readDatagram(datagram.data(), 4096,
0,0);//由于这个udpSocket没有初始化,所以程序总是异常退出
qDebug()<< len;
}
补充:移动开发 , Qt