1001101_Q 2025-06-27 20:28 采纳率: 92%
浏览 7

QT,UDP接收程序崩溃


void udpCommandComm::slot_udpRecvBroadcast()
{
    QByteArray data;

    char buffer[1024] = {0};


//    QHostAddress addr;
//    quint16 port;

    while(recvBroadcast_Flag)
    {

        qDebug()<<"buffer原始大小:"<<strlen(buffer);
        int bytesRead = recvCommandSocket->udpRecv(buffer, 1024);
        if(bytesRead > 0)
        {
            qDebug()<<"接收到UDP广播"<<buffer<<"大小:"<<strlen(buffer);
         //   data = QByteArray(buffer,strlen(buffer));
        }

    }
    qDebug() << "UDP thread stopped";
}

data = QByteArray(buffer,strlen(buffer));这一句加上为何程序崩溃

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-06-27 20:28
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    QT,UDP接收程序崩溃

    问题描述:在使用QT实现UDP接收程序时,程序崩溃。

    分析:在slot_udpRecvBroadcast()函数中,使用了一个字符数组buffer,但是没有检查数组是否已经满了,导致可能会导致程序崩溃。

    解决方案:可以使用QByteArray来存储接收到的数据,而不是使用字符数组。同时,可以使用QByteArray::resize()函数来确保数组的大小足够。

    修改后的代码:

    void udpCommandComm::slot_udpRecvBroadcast()
    {
        QByteArray data;
    
        data.resize(1024); // 设置数组的大小
    
        // 接收数据
        data = udpSocket->read(1024);
    
        // 处理数据
    }
    

    这样可以避免数组溢出导致的崩溃问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月27日