这是一个在使用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