当前位置:编程学习 > wap >>

私有变量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;
}



引用 1 楼 u011404793 的回复:
自己顶一下
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,