QByteArray::data()返回值解析,结构体中char*赋值崩溃

在QTcpSocket编程中,使用QByteArray的data()赋值给结构体的char*成员时导致程序崩溃。分析发现,QByteArray长度不足导致非法内存访问。临时解决方案是通过new或malloc复制内容,但可能导致资源泄露。正确做法是为结构体指针分配空间并使用数据复制。
摘要由CSDN通过智能技术生成

这是一个在使用QByteArray时遇到的bug分析记录

情景
  • 在使用QTcpSocket编程时,使用了自定义的结构体进行数据通信,结构体如下,其中,char* load是消息体的地址。在实际使用过程中,使用readALL读取数据流后,进行分包和组包。在使用char* QByteArray::data 接口对load进行赋值,程序会崩溃。
typedef struct
{
   
    unsigned int send_id;       // 发送方的ID(网络的IP、SRIO的ID)
    unsigned int recv_id;       // 接收方的ID(网络的IP、SRIO的ID)
    unsigned int msg_type : 8;  // 消息类型
    unsigned int len : 24;      // 消息长度,字节数
    unsigned int conn_type: 8;  // 连接类型,TCP、UDP等
    unsigned int pkg_num : 8;   // 总的包数(用于组包传输)
    unsigned int pkg_idx : 8;   // 子包索引(用于组包传输),从1计数
    unsigned 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值